Итератор не возвращает объект элемента или не приводит к соответствующему объекту?

#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. Спасибо вам оооооооооооооооооооооооооо большое за вашу любезную помощь!!! Вы и тот, кто помогает, — суперзвезда! 🙂