java - 尝试在 Java 中使用 XPATH 解析 XML 时获取空值

标签 java xml xpath null

在 Eclipse 中运行此代码时,我只得到空值:

    String recordsAsXML = "<vGVC:Row xmlns:vGVC=\"urn:com.versai:Bacon:GetViewContentsResponse.v1.0\"><vGVC:Column><vGVC:Value>aaa0</vGVC:Value><vGVC:ObjectName>2ff31656-b10c-11e0-99f6-e01321378d2a</vGVC:ObjectName></vGVC:Column><vGVC:ModifiedAfterQuery>false</vGVC:ModifiedAfterQuery></vGVC:Row>";


    DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
    domFactory.setNamespaceAware(true);
    DocumentBuilder builder = domFactory.newDocumentBuilder();
    InputSource is = new InputSource();
    is.setCharacterStream(new StringReader(recordsAsXML));

    Document doc = builder.parse(is);

    XPathFactory factory = XPathFactory.newInstance();
    XPath xpath = factory.newXPath();
    XPathExpression expr = xpath.compile("//vGVC:Value/text()");

    Object result = expr.evaluate(doc, XPathConstants.NODESET);
    NodeList nodes = (NodeList) result;

    for (int i = 0; i < nodes.getLength(); i++) {
        System.out.println(nodes.item(i).getNodeValue()); 
    }

我正在尝试提取“aaa0”值。 你能帮我理解我做错了什么吗?

提前致谢,米哈尔。

最佳答案

您应该使用 namespace 上下文让 XPath 了解您的 namespace ,例如如下所示:

xpath.setNamespaceContext(new NamespaceContext() {  
    @Override public Iterator<?> getPrefixes(String namespaceURI) { return null; }
    @Override public String getPrefix(String namespaceURI) { return "vGVC"; }
    @Override public String getNamespaceURI(String prefix) { return "urn:com.versai:Bacon:GetViewContentsResponse.v1.0"; }
});

这应该在调用evaluate之前完成,如果您有多个命名空间需要处理,您可以将它们全部添加到一个实现中并使用if语句返回正确的前缀/URI。

更多详细信息请参阅此处的 javadoc:http://download.oracle.com/javase/6/docs/api/javax/xml/namespace/NamespaceContext.html

关于java - 尝试在 Java 中使用 XPATH 解析 XML 时获取空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7597644/

相关文章:

java - BigInteger 的 .equals() 方法无法正常工作

javascript - 从 js 文件而不是 xml 文件创建关联数组

java - 如何在constraintlayout中实现可滚动和放大缩小

c# - 如何在 MonoTouch 上生成 XML?

xpath - 哪个更有效:嵌套谓词或选择父元素(通常遍历祖先)

java - Apache 通用 CSVParser/CSVRecord 为空字段返回 null

来自下载链接的 Javafx 图像

java - 对不遵循 SOLID 原则的类进行部分模拟(尤其是依赖注入(inject))

python - 2个关键字之间的Scrapy xpath

python - 如何获取我之前使用其类找到的图像的 xpath?