从xml中,我需要获取每个节点的名称和区域。
我知道样本xpath,
XMLDependency/@name|XMLDependency/@area
,它以逗号分隔值
输出:
Name1, JKL, Name2, MNO
XML:
<DocBuild name="ABCD">
<XMLDependency name="Name1" product="Product ABC" area="JKL" />
<XMLDependency name="Name2" product="Product DEF" area="MNO" />
<XMLDependency name="Name3" product="Product GHI" area="PQR" />
</DocBuild>
疑惑:
area
对于节点不是必需的(值可能存在或不存在),如何处理。name
和area
之间插入任何静态文本,以便我们可以使用实用程序解析String吗? 请帮忙!
[编辑]:
这是我开始使用的Java程序。
XPath xPath = XPathFactory.newInstance().newXPath();
NodeList nodeList = (NodeList) xPath.compile("//XMLDependency/@name|//XMLDependency/@area")
.evaluate(element, XPathConstants.NODESET);
List<String> nodes = new ArrayList<String>();
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
nodes.add(node.getNodeValue());
}
System.out.println(nodes);
使用节点类型和节点值进行处理让我首先解决了问题。
答案 0 :(得分:3)
单独使用XPath无法实现您想要做的事情。您需要为每个XMLDependency
迭代一次,并从那里开始合并值:
XPath xPath = XPathFactory.newInstance().newXPath();
NodeList nodeList = (NodeList) xPath.compile("//XMLDependency")
.evaluate(element, XPathConstants.NODESET);
List<String> nodes = new ArrayList<String>();
for (int i = 0; i < nodeList.getLength(); i++) {
NamedNodeMap att = nodeList.item(i).getAttributes();
Node name = att.getNamedItem("name");
Node area = att.getNamedItem("area");
nodes.add(name.getNodeValue() + ":" +
(area != null ? area.getNodeValue() : ""));
}
System.out.println(nodes);