繁体   English   中英

Xpath从同一节点选择多个属性

[英]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 (值可能存在或不存在),该如何处理。
  • 我们可以在namearea之间插入任何静态文本,以便可以使用实用程序解析String吗?
  • 除上面之外的任何Xpath表达式,以获取要映射的值?(可能正在使用适配器)

请帮忙 !

[编辑]:

这是我开始使用的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM