当前位置: 首页 > 知识库问答 >
问题:

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

江琦
2023-03-14

给定XML:

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

我希望XPath返回值,XPath返回XML序列化

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

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

我发现我可以调用XdmValue。toString()获取XPath求值结果的XML序列化,这会获得选择元素所需的结果,但在选择属性时返回name=“value”。我可以调用XdmItem。getStringValue()获取字符串值,该值为属性获取正确的值,但返回元素的文本内容。

Michael Kay之前说过“Saxon的s9api接口…返回XdmValue对象,您可以查询其类型”。我可以看到,我可以执行instanceof检查,以确定它是否是XdmAtomicValue、XdmExternalObject、XdmFunctionItem或XdmNode,但元素和属性都是XdmNode的实例。我如何区分这两者?

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

共有1个答案

萧卜霸
2023-03-14

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

XdmItem转换为XdmNode后,您可以调用XdmNode.getNodeKind(),它从XdmNodeKind枚举返回一个值,指定它是哪种类型的节点:

        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();
 类似资料:
  • 问题内容: 我正在Python中使用Selenium。我想获取一个元素的,并检查它是否是我所期望的。 这是我的代码: 我怎样才能做到这一点?Selenium文档似乎有很多关于选择元素的内容,但是与属性无关。 问题答案: 您可能正在寻找。一个例子示此处以及

  • 我正在使用Python中的Selenium。我想获取

  • 问题内容: 我正在尝试遍历所有使用forEach 重构的元素。有什么想法为什么在FF,Chrome或IE中不起作用? 问题答案: 您需要使用以下命令将节点列表转换为数组: 或用于循环。 并将ShowResults函数更改为: 为什么我们需要这样做? JavaScript中的某些对象看起来像一个数组,但不是一个。这通常意味着它们具有索引访问和length属性,但是没有任何数组方法。示例包括特殊的变量

  • 我需要实现size()函数,以便它对列表中的元素数量进行计数。 添加作文类的截图。我想我得从那里用一种方法。接口只声明push pop peek isempty函数。没有密码。我相信size()函数不需要。这是我的第一堂编程课,所以我希望我已经给出了解决这个问题所需要的一切。请在此处帮助输入图像说明

  • 在使用Vdt的过程中,你也许会遇到这样一个问题:设置的属性,并不能渲染出来,例如: <input maxlength="10" /> 上述例子中,设置的maxlength属性丢失了。要理解这个原因,可以看看这段介绍 Content attribute & IDL attribute, 以及Virtual-Dom文档中对VNode的介绍 Content vs IDL attribute Conte

  • 问题 在解析获得一个Document实例对象,并查找到一些元素之后,你希望取得在这些元素中的数据。 方法 要取得一个属性的值,可以使用Node.attr(String key) 方法 对于一个元素中的文本,可以使用Element.text()方法 对于要取得元素或属性中的HTML内容,可以使用Element.html(), 或Node.outerHtml()方法 示例: String html =