如何区分从 Saxon XPathSelector 返回的属性节点和元素节点

2024-05-15

给定 XML:

<root name="value">
  <level1>
    <level2>Text</level2>
  </level1>
</root>

我想要 XPath/root/@name回来value,和 XPath/root/level1返回 XML 序列化<level1> node:

  <level1>
    <level2>Text</level2>
  </level1>

我在 Java 中使用 Saxon 9.6 的 a9api 接口。

我发现我可以打电话XdmValue.toString() http://www.saxonica.com/html/documentation/javadoc/net/sf/saxon/s9api/XdmValue.html#toString()获取 XPath 评估结果的 XML 序列化,这会获取选择元素所需的结果,但会返回name="value"选择属性时。我可以打电话XdmItem.getStringValue() http://www.saxonica.com/html/documentation/javadoc/net/sf/saxon/s9api/XdmItem.html#getStringValue()得到字符串值 https://www.w3.org/TR/xpath-datamodel/#acc-summ-string-value,它为我提供正确的属性值,但返回元素的文本内容。

迈克尔·凯此前曾说“Saxon 的 s9api 接口...返回 XdmValue 对象,您可以查询其类型” https://stackoverflow.com/a/7018824/1216210。我可以看到我可以执行instanceof检查以确定它是否是XdmAtomicValue, XdmExternalObject, XdmFunctionItem, or XdmNode,但元素和属性都是实例XdmNode。我如何区分两者?

(我无法修改 XPath,因为它们是由用户提供的。)


我刚写完问题就发现了答案,所以我会分享给其他人。

铸造后XdmItem to an XdmNode,你可以打电话XdmNode.getNodeKind() http://www.saxonica.com/html/documentation/javadoc/net/sf/saxon/s9api/XdmNode.html#getNodeKind(),它返回一个值XdmNodeKind http://www.saxonica.com/html/documentation/javadoc/net/sf/saxon/s9api/XdmNodeKind.html指定节点类型的枚举:

        XdmValue matchList = xPathSelector.evaluate();
        XdmItem firstItem = matchList.itemAt(0);
        if (firstItem instanceof XdmNode) {
           XdmNode xdmNode = (XdmNode) firstItem;
           XdmNodeKind nodeKind = xdmNode.getNodeKind();
           if (nodeKind == XdmNodeKind.ELEMENT) {
              return xdmNode.toString();
           }
        }
        return firstItem.getStringValue();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何区分从 Saxon XPathSelector 返回的属性节点和元素节点 的相关文章

随机推荐

  • 位置数据 Google 照片 API

    当我通过 API 查询 Google 照片中的照片时 它不会返回与该图像关联的任何位置数据 当我在 Google Photos 中查看有关图像的信息时 我可以在地图上看到该位置 但是 API 没有给我这些坐标 mediaMetadata g
  • 为什么 Google 建议将库复制到您的树中?

    谷歌的Play 服务 API 的使用说明 http developer android com google play services setup html 例如 说 将 extras google google play service
  • 将 SVN 存储库从 Google Code 传输到 RiouxSVN

    我在 Google Code 上有存储库 现在我想将这些代码存储库从 Google Code 移动到 RiouxSVN 问题是我不知道如何实现这一点 我曾尝试使用 svnadmin 和 svnrdump 但无法成功 对于 svnrdump
  • 如何在flutter项目中使用http拦截器?

    我必须向我的所有 Api 添加标头 有人告诉我为此使用 http 拦截器 但我无法理解如何做到这一点 因为我是颤振的新手 谁能帮我举个例子吗 您可以使用http 拦截器 https pub dev packages http interce
  • 访问 Magento 购物车和/或结帐中的运费

    请注意 这个问题是关于运费 而不是价格 有一个重要的区别 即运输方式为店主支付的费用是多少 而不是客户支付的费用 The shipping tablerate数据库表包括一个cost字段 该字段填充在Mage Shipping Model
  • Silverlight 3 工具未显示在 Visual Studio 中

    我下载并安装了Silverlight 3 工具 http go microsoft com fwlink LinkID 143571 我想在 ASP net 页面中使用 Silverlight 服务器控件 但我的工具箱中没有 Silverl
  • Tomcat 服务器向 servlet 发出 3 个请求

    下面是我的doGet method WebServlet name IndexServlet urlPatterns home initParams WebInitParam name sortBy value Constants POPU
  • 创建一个简单的 Rails 3 文本助手 Gem [重复]

    这个问题在这里已经有答案了 我一直在开发我的第一个 Rails 3 插件 以打包一个我喜欢在ApplicationHelper我所有的应用程序 你可以看到整个代码在 Github 上 https github com burlesona s
  • 如何从文本文件读取整数到数组

    这就是我想做的 我对此有些不满 但我希望你能容忍我 这对我来说是一个非常新的概念 1 在我的程序中 我希望创建一个包含 50 个整数的数组来保存来自文件的数据 我的程序必须获取用户的文档文件夹的路径 2 文件的名称为 grades txt
  • 在 ASP.NET 3.5 中使用 ASMX 文件的 WS-Security

    基本上 我需要设置 ASMX 文件 以便当我在浏览器中将其拉出以显示 WebMethod 规范时 Soap 标头符合以下格式
  • 如何从 Firebase 同步检索数据?

    我有两个集合 即用户和问题 根据使用 userId 登录的用户 我检索currQuestion价值来自users收藏 基于currQuestion值 我需要检索question来自 Firebase 的文档Questions收藏 我使用下面
  • 我怎样才能挂钩 Perl 的 use/require 以便抛出异常?

    如果文件已经加载 是否可以挂载到use require所以我可以抛出异常 在我即将到来的nextgen blacklist http github com EvanCarroll nextgen blob blacklist lib nex
  • WCF - AsyncPattern=true 或 IsOneWay=true

    我的 WCF 服务中很少有方法需要花费大量时间 生成报告和发送电子邮件 根据目前的要求 要求客户端应用程序只需提交请求 然后不等待整个过程完成 它将允许用户继续在客户端应用程序中执行其他操作 而不是等待整个过程完成 我很困惑该走哪条路 As
  • Pandas:将 pytz.FixedOffset 应用于系列

    我有一个带有timestamp列看起来像这样 0 2020 01 26 05 00 00 08 00 1 2020 01 26 06 00 00 08 00 Name timestamp dtype datetime64 ns pytz F
  • 如何在服务器端按钮点击时关闭当前标签页?

    我尝试在确认后关闭当前选项卡 因此我将以下代码放在确认按钮的末尾 但选项卡没有关闭 string jScript ClientScript RegisterClientScriptBlock this GetType keyClientBl
  • C++ php 和静态库

    我创建了一个library a 其中包含 cpp 和 h 文件 其中包含很多类 嵌套类和方法 我想在 php 示例中包含这个静态库并尝试使用它 我想提一下 我是 php 新手 我已经在 test cpp 文件中测试了我的 libray a
  • Microsoft VS Code:当我尝试启动程序时,出现错误“spawn php ENOENT”

    我正在尝试在 Microsoft VS Code 上运行 PHP 代码 当我单击启动时 唯一发生的事情是调试控制台中出现错误 生成 php ENOENT 为了解决这个问题 我将 XDebug 的 dll 文件放入 ext 文件夹中 我将 p
  • 如何在Oracle中从表中选择列,*?

    我正在创建很多脚本 有时为了检查表是否根据我的需要进行更新 我会即时编写几个 SELECT 语句 在 SQL SERVER 中你可以这样写 SELECT Column1 FROM MY TABLE 出于可见性原因 这很有用 但是这似乎在 O
  • conda clean 从哪里删除包?

    conda 文档指定 conda clean h y dry run json debug verbose q a i l t p s 删除未使用的包和缓存 Example conda clean tarballs conda 干净文档 h
  • 如何区分从 Saxon XPathSelector 返回的属性节点和元素节点

    给定 XML