Я не хочу просто оставлять это здесь, но я ответил на похожий вопрос здесь .
В Java у вас есть довольно много вариантов фактического синтаксического анализа XML - XPath будет самым медленным, но даст вам хороший язык выражений для запроса содержимого. DOM будет вторым медленным, но даст вам древовидную модель в память о вашем документе, чтобы идти. SAX будет быстрее, но требует, чтобы вы строили список, поскольку он анализирует документ на лету, и, наконец, STAX будет самым быстрым, но требует, чтобы вы написали какой-то определенный код в свой формат для построения списка.
Наконец, я бы порекомендовал библиотеку, которую я написал, под названием SJXP, которая дает вам производительность STAX с простотой XPath ... это идеальное сочетание двух.
Вы пишете правила типа "/ root / Persons / list / Person / Name" и даете ему свой документ, и он будет срабатывать каждый раз при попадании в имя и вызывать предоставленный пользователем обратный вызов для вас, передавая найденное имя .
Вы создаете несколько правил для всех значений, которые вы хотите, и для альта ... вы можете создать правило START_TAG для открытого тега "/ root / Persons / list / Person" и создать новый "Person p = new Person () "в вашем коде, а затем при попадании каждого подэлемента вы просто устанавливаете соответствующее значение для человека, что-то вроде этого (в качестве примера):
IRule linkRule = new DefaultRule(Type.CHARACTER, "/root/Persons/list/Person/Name") {
@Override
public void handleParsedCharacters(XMLParser parser, String text, Object userObject) {
// Get the last person we added on open-tag.
Person p = personList.get(personList.size() - 1);
// <Name> tag was parsed, 'text' is our parsed Name. Set it.
p.setName(text);
}
}
Приятной особенностью SJXP является то, что накладные расходы памяти ниже, чем у других подходов синтаксического анализатора, и производительность выше (SAX будет анализировать элементы на совпадение, синтаксический анализ на основе STAX не анализирует элементы из потока, пока они не будут требуется).
В конечном итоге вы создадите столь же запутанный код, чтобы пройтись по DOM и всем элементам Node, чтобы создать свой список.
ПОСЛЕДНО, если вы чувствуете себя комфортно с XML-> Object mapping, вы можете делать то, что сказал другой человек, и использовать JAXB. Вам нужно будет написать схему для ваших XML-файлов, а затем она сгенерирует для вас объекты Java, которые будут идеально им соответствовать. Затем вы можете просто сопоставить ваш XML-файл непосредственно с вашим Java-объектом и вызвать что-то вроде "people.getList ()" или что-то, что JAXB сгенерирует для вас.
В этом случае издержки памяти и производительность будут на одном уровне с анализом DOM (примерно).