У меня есть XML, имеющее что-то вроде этого данныев JAVA, как перейти к определенному узлу в XML?
<A Name="">
</A>
<A Name="">
</A>
.....
Как я могу перейти к какому-то конкретному узлу и читать его - как 3-й tag- А с помощью SAX парсера
У меня есть XML, имеющее что-то вроде этого данныев JAVA, как перейти к определенному узлу в XML?
<A Name="">
</A>
<A Name="">
</A>
.....
Как я могу перейти к какому-то конкретному узлу и читать его - как 3-й tag- А с помощью SAX парсера
Вы можете «прыгать» к конкретному XML-тег, но последовательно читайте теги. Нет надежного способа пропускать теги без чтения.
Ваше самое лучшее с использованием Java StAX API. Oracle Java Tutorial Site отлично поработал над тем, как с этим работать. Это очень просто и просто для простого чтения/анализа XML.
Если вы хотите перейти на подузел, вы должны использовать DOM API, а не SAX.
// load the document
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new File(filename));
// prepare result list
ArrayList<Element> res = new ArrayList<Element>();
// prepare to use xpath
XPath xpath = XPathFactory.newInstance().newXPath();
// read 3rd A element
NodeList list = (NodeList) xpath.compile("/A[3]")
.evaluate(doc, XPathConstants.NODESET);
// copy the DOM element in the result list
for (int i = 0; i < list.getLength(); i++) {
res.add((Element) list.item(i));
}
Обратите внимание: вопреки SAX он прочитает весь документ, прежде чем разрешить вам доступ к нему.
Вы не можете перейти к (пропустить все элементы до) определенного элемента, используя SAX. Он последовательно считывает все элементы и возвращает их на ваш ContentHandler
. Все, что вы можете сделать, это пропустить синтаксический анализ, после того как вы нашли соответствующий элемент, выбросив исключение из ContentHandler.
Если вы ищете какой-то случайный доступ к элементам XML, то вы должны окончательно рассмотреть DOM, как указано @Guillaume.
Почему голос? Если кто-то голосует, пожалуйста, оставьте комментарий, почему вы это сделали. В противном случае ответы не могут улучшиться. – jboi
Почему это проголосовало? – keaplogik