我有一个具有多个hpp:HourlyHistoricalPrice元素的XML文档,如下所示:



<?xml version="1.0">
<hhp:HourlyHistoricalPrices xmlns:hhp="urn:or-HourlyHistoricalPrices">
  <hhp:HourlyHistoricalPrice xmlns:hhp="urn:or-HourlyHistoricalPrice">
    <hhp:indexId>1025127</hhp:indexId>
    <hhp:resetDate>20161231T000000</hhp:resetDate>
    <hhp:refSource>AIBO</hhp:refSource>
    <hhp:indexLocation/>
    <hhp:price1>50,870000</hhp:price1>
    ...
    <hhp:price48>43,910000</hhp:price48>
  </hhp:HourlyHistoricalPrice>
  <hhp:HourlyHistoricalPrice xmlns:hhp="urn:or-HourlyHistoricalPrice">
    <hhp:indexId>1025127</hhp:indexId>
    <hhp:resetDate>20160101T000000</hhp:resetDate>
    <hhp:refSource>AIBO</hhp:refSource>
    <hhp:indexLocation/>
    <hhp:price1>51,870000</hhp:price1>
    ...
    <hhp:price48>49,910000</hhp:price48>
  </hhp:HourlyHistoricalPrice>
  <hhp:HourlyHistoricalPrice xmlns:hhp="urn:or-HourlyHistoricalPrice">
    <hhp:indexId>1025127</hhp:indexId>
    <hhp:resetDate>20163112T000000</hhp:resetDate>
    <hhp:refSource>APX</hhp:refSource>
    <hhp:indexLocation/>
    <hhp:price1>63,870000</hhp:price1>
    ...
    <hhp:price48>29,910000</hhp:price48>
  </hhp:HourlyHistoricalPrice>
</hhp:HourlyHistoricalPrices>





我只想检索具有hhp:HourlyHistoricalPrice特定值的hhp:refSource节点,例如AIBO

我正在尝试下面的XPathExpression,但这什么也找不到。



 XPathFactory xpf = XPathFactory.newInstance();
XPath xpath = xpf.newXPath();

String strExprssion =
  "/hhp:HourlyHistoricalPrices/hhp:HourlyHistoricalPrice[hhp:refSource='AIBO']";

XPathExpression expression = xpath.compile(strExprssion);

NodeList nodes = (NodeList) expression.evaluate(originalXmlDoc, XPathConstants.NODESET);

System.out.println(nodes.getLength());





如果有人可以就正确的表达方式提供建议,我将不胜感激。

非常感谢。

最佳答案

您需要将前缀扩展到它表示的xml名称空间中:

String strExprssion = "//urn:or-HourlyHistoricalPrice:HourlyHistoricalPrice[urn:or-HourlyHistoricalPrice:refSource='AIBO']";


所以对我来说,这个测试班

public class XPathCheck {
    public static void main(String[] args) throws FileNotFoundException, IOException, XPathExpressionException {
        XPathFactory xpf = XPathFactory.newInstance();
        XPath xpath = xpf.newXPath();

        try (InputStream file = new FileInputStream(Paths.get("src", "inputFile.xml").toFile())) {
            String strExprssion = "//urn:or-HourlyHistoricalPrice:HourlyHistoricalPrice[urn:or-HourlyHistoricalPrice:refSource='AIBO']";
            XPathExpression expression = xpath.compile(strExprssion);
            NodeList nodes = (NodeList) expression.evaluate(new InputSource(file), XPathConstants.NODESET);

            System.out.println(nodes.getLength());
        }
    }
}


输出“ 2”。

关于java - 正确的XPathExpression以检索Java中的节点吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50985914/

10-10 03:52