Ненавижу просто оставить это здесь, но я ответил на аналогичный вопрос here.
В Java у вас есть довольно много вариантов на самом синтаксическом анализе XML - XPath будет самым медленным, но дает вам хороший язык выражения для запроса контента. DOM будет вторым самым медленным, но даст вам древовидную модель в памяти вашего документа, чтобы идти. SAX будет быстрее, но требует, чтобы вы создали список, когда он анализирует документ «на лету», и, наконец, STAX будет самым быстрым, но требует, чтобы вы записали определенный код в свой формат, чтобы создать свой список.
Наконец, я бы порекомендовал библиотеку, которую я написал под названием SJXP, которая дает вам производительность STAX с легкостью XPath ... это идеальное сочетание двух.
Вы пишете такие правила, как «/ root/Персоны/список/Лицо/Имя», и дайте ему свой документ, и он будет срабатывать каждый раз, когда он набирает имя, и вызывать вызываемый пользователем обратный вызов для вас, передавая вам его имя найденный.
Вы создаете несколько правил для всех желаемых значений и альта ... вы можете создать правило START_TAG для открытого тега «/ root/Персоны/список/Личность» и создать новый «Person p = новый 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 и все элементы узла для создания списка.
ПОСЛЕДНЕЕ, если вам было удобно с XML-> сопоставлением объектов, вы могли бы сделать то, что сказал другой человек, и использовать JAXB. Вам нужно будет написать схему для ваших XML-файлов, тогда она создаст для вас объекты Java, которые идеально подходят для них. Затем вы можете просто сопоставить свой XML-файл напрямую с вашим Java-объектом и вызвать что-то вроде «person.getList()» или что-то, что генерирует JAXB для вас.
Накладные расходы памяти и производительность будут в порядке с разбором DOM в этом случае (примерно).
спасибо, им новое для Java, может у пожалуйста, покажите мне пример кода? Спасибо за вашу помощь – ibm123
Поскольку вы новичок в java, я добавляю новый ответ, как использовать регулярные выражения в этом примере. Как насчет этого? – ZehnVon12
Спасибо за внимание, я рассмотрю ваш ответ – ibm123