微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Saxon Xpath 2.0 不会得到任何结果

如何解决使用 Saxon Xpath 2.0 不会得到任何结果

我想使用 xpath 2.0 或 3.0 表达式解析 xml。 我想使用 XPath 的最新版本,所以我下载了 Saxon jars。 这是我的代码

Processor proc = new Processor(false);
DocumentBuilder builder = proc.newDocumentBuilder();
XdmNode doc = builder.build(new File(file.getPath()));
XPathCompiler xpath = proc.newXPathCompiler();
XPathSelector selector = xpath.compile(mappingXPath.get(key)).load();
selector.setContextItem(doc);
for (XdmItem item : selector) {
        XdmNode node = (XdmNode) item;
        org.w3c.dom.Node element = (org.w3c.dom.Node) node.getExternalNode();
        System.out.println(element.getTextContent());
}

例如,xml的xpath表达式“//mods/identifier[@type="doi"]”:

<collection>
  <mods xmlns="http://www.loc.gov/mods/v3" xmlns:etd="http://www.ntltd.org/standards/Metadata/etdms/1.0/etdms.xsd" xmlns:local="http://idea.library.drexel.edu" xmlns:mods="http://www.loc.gov/mods/v3" xmlns:datacite="https://schema.datacite.org/Meta/kernel-4.0/Metadata.xsd" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink">
    <identifier type="assetId">16</identifier>
<identifier type="doi">10.17918/D8VD4T</identifier>
 </mods>
</collection>```

my selector is empty,why I don't get any result while I run the same expression and xml file in https://www.freeformatter.com/xpath-tester.html
and it provide results?
 

解决方法

XdmNode.getExternalNode() 仅在 XDM 节点是外部节点(例如 DOM 节点)的包装器/视图时才会返回结果。使用 Saxon DocumentBuilder 构建的节点是本机 XDM 节点,而不是外部 DOM 节点的视图。如果您想将 DOM 与 Saxon 一起使用,您可以 - 只需在外部构建 DOM 节点并使用 DocumentBuilder.wrap(domNode) 包装它。但请注意,Saxon 在处理 DOM 节点时比使用其原生 XDM 树模型时慢 5 到 10 倍。

,

除了 Mike 在他的回答中写的内容之外,如果您有 XdmNode node 并且想要它的字符串内容,您可以使用 node.getStringValue(),结果应该是 {{1 }} 会给你一个 DOM 节点。

方法 getTextContent() 的文档位于 https://www.saxonica.com/html/documentation10/javadoc/net/sf/saxon/s9api/XdmItem.html#getStringValue--

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。