#java #jdom
#java #jdom
Вопрос:
Может кто-нибудь, пожалуйста, скажите мне, почему итератор в этом коде не возвращается с объектом элемента ?!? Не удается выполнить приведение к объекту элемента! Это реализация SAX в JDOM!
org.xml.sax.InputSource inStream = new org.xml.sax.InputSource();
inStream.setCharacterStream(new java.io.StringReader(temp));
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(inStream);
ArrayList<String> queries = new ArrayList<String>();
Element root = doc.getRootElement();
Iterator elemIter = root.getDescendants();
while (elemIter.hasNext()) {
**Element tempElem = (Element)elemIter.next();**
String CDATA = tempElem.getChildText("ZQuery");
queries.add(CDATA);
elemIter.next();
}
Комментарии:
1. Я предлагаю просто пройти по всему дереву и записать типы в ваш журнал. Тогда вы увидите, возможно, вы смотрите не на тот узел?
Ответ №1:
Рассмотрим этот XML-документ:
<root>
<child/>
</root>
Потомками корня являются:
- текстовый узел, содержащий символ новой строки 4 пробела
- дочерний элемент
- текстовый узел, содержащий символ новой строки
Кроме того, getDescendants
проходит через всех потомков, а не только непосредственных дочерних элементов элемента. Я почти уверен, что это не то, что вы хотите.
Ответ №2:
Вам нужно передать ElementFilter
в getDescentdents(Filter filter)
XML
<?xml version="1.0" encoding="UTF-8"?>
<root>
<child1>
<child11></child11>
<child12></child12>
</child1>
<child2></child2>
</root>
Пример
SAXBuilder builder = new SAXBuilder();
Document document = builder.build(new File("src/com/foo/test.xml"));
Element root = document.getRootElement();
ElementFilter filter = new ElementFilter();
Iterator i = root.getDescendants(filter);
while (i.hasNext()) {
Element element = (Element) i.next();
System.out.println(element);
}
Вывод
[Element: <child1/>]
[Element: <child11/>]
[Element: <child12/>]
[Element: <child2/>]
Комментарии:
1. Спасибо вам оооооооооооооооооооооооооо большое за вашу любезную помощь!!! Вы и тот, кто помогает, — суперзвезда! 🙂