Итератор не возвращает объект элемента или не приводит его к соответствующему объекту? - PullRequest
0 голосов
/ 15 октября 2011

Может кто-нибудь сказать мне, почему Итератор в этом коде не возвращается с Element Object?!?Не может быть наложено на Элемент Элемента!Это реализация 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();
        }

Ответы [ 2 ]

1 голос
/ 15 октября 2011

Рассмотрим этот документ XML:

<root>
    <child/>
</root>

Потомками корня являются:

  • текстовый узел, содержащий символ новой строки + 4 пробела
  • дочерний элемент
  • текстовый узел, содержащий символ новой строки char

Кроме того, getDescendants проходит через всех потомков, а не только непосредственных потомков элемента.Я уверен, что это не то, что вы хотите.

0 голосов
/ 15 октября 2011

Вам необходимо передать 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/>]
...