DOM getElementsByTagName()返回具有NULL值的节点

时间:2012-01-19 17:56:19

标签: java xml dom nodelist

我有一个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中,打印使用 getElementsByTagName()获得的第一个节点的会返回 NULL

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

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

2 个答案:

答案 0 :(得分:8)

That is defined in the specification。元素节点“nodeValuenull

  类型为nodeValue

DOMString:此节点的值,具体取决于其类型;见上表。如果将其定义为null,则将其设置为无效。

如果要获取每个节点的文本内容,则必须迭代所有文本节点后代并连接它们的值。

也就是说,您正在使用的API实现可能提供一种方法来直接检索元素的文本内容。例如,PHP的DOMNode具有$textContent属性。

如果在您的情况下,元素的唯一子节点实际上是您想要的文本节点,则只需访问其值:

element.getFirstChild().getNodeValue()

答案 1 :(得分:3)

如果您有一个元素节点并想要获取其内部文本,请使用getTextContent(),如下所示:

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