Парсинг XML Textlist - PullRequest
       7

Парсинг XML Textlist

0 голосов
/ 21 января 2010

Я пытаюсь разобрать файл XML. Я могу разобрать обычный текстовый узел, но как мне разобрать текстовый список? Я получаю первый ребенок из текстового списка, к сожалению, все. Если я попытаюсь сделать

 elem.nextSibling();

это всегда ноль, которого не может быть, я знаю, что осталось два других значения

Может быть, кто-нибудь может привести пример?

Спасибо!

Пример XML

<viewentry position="1" unid="7125D090682C3C3EC1257671002F66F4" noteid="962" siblings="65">
    <entrydata columnnumber="0" name="Categories">
        <textlist>
            <text>Lore1</text>
            <text>Lore2</text>
        </textlist>
    </entrydata>
    <entrydata columnnumber="1" name="CuttedSubjects">
        <text>
            LoreImpsum....
        </text>
    </entrydata>
    <entrydata columnnumber="2" name="$35">
        <datetime>20091117T094224,57+01</datetime>
    </entrydata>
</viewentry>

1 Ответ

2 голосов
/ 21 января 2010

Я предполагаю, что вы используете парсер DOM.

Первый дочерний элемент узла <textlist> - это не первый узел <text>, а необработанный текст, содержащий пробельные символы и возврат каретки между концом <textlist> и началом <text>. Вывод следующего фрагмента (с использованием org.w3c.dom. * И javax.xml.parsers. *)

Node grandpa = document.getElementsByTagName("textlist").item(0);
Node daddy = grandpa.getFirstChild();
while (daddy != null) {
    System.out.println(">>> " + daddy.getNodeName());
    Node child = daddy.getFirstChild();
    if (child != null)
        System.out.println(">>>>>>>> " + child.getTextContent());
    daddy = daddy.getNextSibling();
}

показывает, что <textlist> имеет пять дочерних элементов: два элемента <text> и три необработанных фрагмента текста до, между и после них.

>>> #text
>>> text
>>>>>>>> Lore1
>>> #text
>>> text
>>>>>>>> Lore2
>>> #text

При таком анализе XML легко не заметить, что структура DOM-дерева может быть сложной. Вы можете быстро закончить итерацию по NodeList в неправильном поколении, и тогда вы получите нулевые значения, в которых вы ожидаете братьев и сестер. Это одна из причин, почему люди придумали все виды xml-to-java вещей, от доморощенных классов XMLHelper до выражений XPath, от Digester до JAXB, поэтому вам нужно переходить на уровень DOM только тогда, когда это абсолютно необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...