【发布时间】:2017-09-14 15:24:14
【问题描述】:
我正在尝试从 XML 节点中获取值并在 CDATA 部分出现问题。
我的 XML 看起来像:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root>
<Test>This is my node</Test>
<HelpContent><![CDATA[this is the CDATA section]]></HelpContent>
</root>
使用此代码:
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(currentFile);
XPathFactory xPathFactory = XPathFactory.newInstance();
XPath xpathObj = xPathFactory.newXPath();
XPathExpression expr = xpathObj.compile("//*");
NodeList nodes = (NodeList)expr.evaluate(doc, XPathConstants.NODESET);
int len = nodes.getLength();
for (int i = 0; i < len; i++){
Node node = nodes.item(i);
System.out.println("Node name [" + node.getNodeName() + "] of type [" + node.getNodeType() + "]");
System.out.println("NodeValue: " + node.getNodeValue());
System.out.println("TextContent: " + node.getTextContent());
}
我得到了以下信息:
> Node name [root] of type [1]
> NodeValue: null
> TextContent: This is my
> node this is the CDATA section
>
> Node name [Test] of type [1]
> NodeValue: null
> TextContent: This is my node
>
> Node name [HelpContent] of type [1]
> NodeValue: null
> TextContent: this is the CDATA section
如您所见,对于具有子节点的节点(在本例中只有根节点),我从子节点中提取了所有文本。 此外,您可以看到 getNodeType 始终在重新调整 1 (ELEMENT_NODE)...
问题只有在包含诸如“Test”和“TextContent”之类的数据但对于诸如“root”之类的节点为空或为空时,我如何才能获取节点的值?
谢谢。
【问题讨论】:
-
链接的副本说明 XPath 忽略
CDATA节点。如果你遍历 DOM 而不是使用 XPath,你应该能够找到它们。 -
在 DOM 中
node.getNodeValue()的元素节点为空。 w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/…。您可能希望向我们展示一个最小但完整的示例,以便我们重现您所说的结果,以及您期望的结果的解释。 -
链接的副本似乎是指 CDATA 文字被剥离但返回值的事实......
-
@MartinHonnen 是的......我认为我搞砸了我的原始代码;我已经用示例更新了问题
标签: java xml xml-parsing