[英]Xpath select multiple attributes from same node
从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);
通过使用节点类型和节点值进行处理可以解决我的第一点。
您尝试做的事情不能仅靠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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.