DOM getElementsByTagName () возвращает узлы со значениями NULL - PullRequest
5 голосов
/ 19 января 2012

У меня есть XML-файл следующим образом.

Когда я использую getElementsByTagName("LEVEL2_ID"), я получаю NodeList с Nodes, но эти узлы имеют значения NULL (другими словами, getNodeValue() на каждом узле результата будет возвращать NULL). Почему это? Мне нужно получить значение содержимого каждого узла, в этом случае 2000.

XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Root>
    <Date>01/17/2012</Date>
    <LEVEL1>
        <LEVEL1_ID>1000</LEVEL1_ID>

        <LEVEL2>
           <LEVEL2_ID>2000</LEVEL2_ID>
        </LEVEL2>
    </LEVEL1>
</Root>

В Java печать значения 1-го узла, полученного с помощью getElementsByTagName () , возвращает NULL :

NodeList nodes = document.getElementsByTagName("LEVEL2_ID");

System.out.println("Value of 1st node: " + nodes.item(0).getNodeValue());

Ответы [ 2 ]

8 голосов
/ 19 января 2012

Это определено в спецификации .Элемент узла 'nodeValue равен null.

nodeValue типа DOMString: значение этого узла в зависимости от его типа;см. таблицу выше.Когда он определен как null, установка его не имеет никакого эффекта.

Если вы хотите получить текстовое содержимое каждого узла, вы должны выполнить итерацию по всем потомкам текстового узла и объединить их значение.

Тем не менее используемая реализация API может предложить метод для непосредственного получения текстового содержимого элемента.Например, PHP DOMNode имеет свойство $textContent.

Если, как и в вашем случае, единственным дочерним элементом элемента является фактически нужный вам текстовый узел, вы можете просто получить доступ к егозначение:

element.getFirstChild().getNodeValue()
3 голосов
/ 19 января 2012

Если у вас есть узел элемента и вы хотите получить его внутренний текст, используйте getTextContent(), например:

NodeList nodes = document.getElementsByTagName("LEVEL2_ID");
System.out.println("Value of 1st node: " + nodes.item(0).getTextContent());
...