获取所有子节点和值的java XPath
我试图从以下XML源获取所有活动及其子节点
<process>
<name>processName</name>
<input>JSON</input>
<input>productName</input>
<output>JSON</output>
<activity>
<name>createDomain</name>
<type>bean</type>
<input>domainName</input>
<output>JSON</output>
</activity>
<mapActivity>
<map></map>
</mapActivity>
<activity>
<name>preFill</name>
<type>REST</type>
<input>JSON</input>
<output>JSON</output>
</activity>
</process>
因此,结果将返回createDomain, bean, domainName, JSON
和preFill, REST, JSON, JSON
。但我不知道该怎么做
我现在有这个代码
public static void displayActivities(Document myDoc) throws Exception {
XPathExpression exp = xp.compile("process/activity/*");
NodeList myList = (NodeList) exp.evaluate(myDoc, XPathConstants.NODESET);
for (int i = 0; i < myList.getLength(); i++) {
Node tempNode = myList.item(i);
System.out.println("Value: " + tempNode.getNodeValue());
if (tempNode.hasChildNodes()) {
for (int x = 0; x < tempNode.getChildNodes().getLength(); x++) {
System.out.println("Sub-value: " + myDoc.getChildNodes().item(x).getNodeName());
}
}
}
System.out.println("------------------------------");
}
这将返回以下内容:
Value: null
Sub-value: process
# 1 楼答案
在Java中使用DOM时,所有内容都是一个节点。元素是节点,文本是节点,依此类推。XPath将返回完整的XML元素:
这意味着tempNode实际上是元素类型,而不是文本类型。您将在子节点中找到文本。根据Node Javadoc,调用getNodeValue()时,元素将返回null