【问题标题】:XPath - how to get a list of multiple tags with the same nameXPath - 如何获取具有相同名称的多个标签的列表
【发布时间】:2017-06-24 15:04:39
【问题描述】:
<?xml version="1.0"?>
<shop>
    <shoes>
        <brand>Nike</brand>
        <size>13</size>
        <colour>White</colour>
        <price>34.99</price>
        <additional name="abc">123</additional>
        <additional name="def">456</additional>
        <additional name="ghi">789</additional>
        <additional name="jkl">101</additional>
    </shoes>
    <trousers>
        <brand>Levi</brand>
        <size>36</size>
        <legSize>33</legSize>
        <colour>Stonewash</colour>
        <price>69.99</price>
        <additional name="mno">112</additional>
        <additional name="pqr">131</additional>
        <additional name="stu">415</additional>
        <additional name="vwx">161</additional>
    </trousers>
</shop>

鉴于上述 xml 文件,我将如何检索 &lt;shoes&gt; 标记内的所有 &lt;additional&gt; 标记的列表?我想获取“名称”的所有值以及标签之间的数值。像这样的:

abc, 123
def, 456
ghi, 789
jkl, 101

问题是我不知道会有多少额外的标签。可能没有,也可能有 20 个。我需要一些方法来计算它们,然后删除信息。

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 您好 JEY,我已经尝试过“shop/shoes//additional[@name][1]”,这给了我想要的位置一。我似乎找不到返回所有内容数组的方法

标签: java xml xpath


【解决方案1】:

这是一个使用 JDK 中的XPath 执行查询的示例。它假定变量 xml 包含您的 XML 文档。

XPathFactory factory = XPathFactory.newInstance();
XPath xPath = factory.newXPath();
NodeList nodeList = (NodeList) xPath.evaluate("//shoes/additional", new InputSource(new StringReader(xml)), XPathConstants.NODESET);
for (int i = 0; i < nodeList.getLength(); ++i) {
    String name = nodeList.item(i).getAttributes().getNamedItem("name").getNodeValue();
    String text = nodeList.item(i).getTextContent();
    System.out.println(name + ", " + text);
}

【讨论】:

    【解决方案2】:

    使用 //shoes/additional 您将获得所有节点的列表,并可以在 Java 中对其进行迭代。

    【讨论】:

      猜你喜欢
      • 2021-11-24
      • 2020-03-04
      • 1970-01-01
      • 2011-09-25
      • 2021-07-10
      • 1970-01-01
      • 2020-03-30
      • 1970-01-01
      • 2023-01-17
      相关资源
      最近更新 更多