我使用以下代码获取xml中特定标记的值:
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
Document doc = null;
DocumentBuilder docbuilder = docBuilderFactory.newDocumentBuilder();
doc = docbuilder.parse(jobFilePath);
NodeList nodeList = doc.getElementsByTagName("xyz");
System.out.println("nodelist Lengthhhhhhhhhh = " + nodeList.getLength());
for (int i=0;i<nodeList.getLength();i++) {
Node c= nodeList.item(i);
System.out.println("val =" + c.getNodeValue());
}
输入xml是
<abc>
<xyz p="Layouts">a</xyz>
<xyz p="Layouts">b</xyz>
<xyz p="Layouts">3</xyz>
</abc>
输出
nodelist Lengthhhhhhhhhh 3
val = null
val = null
val = null
为什么它会出现空?
答案 0 :(得分:2)
在这里走出困境...但是从我在Javascript中对DOM操作的记忆中,你需要使用:
Node c= nodeList.item(i).getFirstChild();
由于firstChild包含标签本身的实际值。
答案 1 :(得分:1)
尝试更改此内容:
System.out.println("val =" + c.getNodeValue());
成:
System.out.println("val =" + c.getTextContent());
答案 2 :(得分:1)
与其他人一样,getTextContent()
将为您提供xyz
元素的Text节点的内容。
getNodeValue()
中指定了您要求Node c= nodeList.item(i);
这种行为的实际原因:
属性nodeName,nodeValue和 属性包含在一个机制中 无需获取节点信息 铸造到特定的派生 接口。在没有的情况下 这些属性的明显映射 对于特定的nodeType(例如, 元素或属性的nodeValue 对于评论),返回null 。
执行第c
行时,节点xyz
包含一个Element类型的对象(nodeName = null
,nodeValue = xyz
)。这些a
元素的子文本节点实际上包含值b
,3
和getTextContent()
。方法getNodeValue()
返回给定元素的文本节点的值,其中{{1}}只返回适用于特定节点的nodeValue属性。
DOM Level 2 Core API还为Document中的其他类型的节点指定了这些值。请注意,文本节点的nodeValue恰好是节点的内容。
答案 3 :(得分:0)
也许你应该试试这个:
c.getTextContent()