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

时间:2016-06-22 14:31:01

标签: java xpath saxon

鉴于XML:

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

我希望XPath /root/@name返回value,XPath /root/level1返回<level1>节点的XML序列化:

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

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

我发现我可以调用XdmValue.toString()来获取XPath评估结果的XML序列化,这样可以获得选择元素所需的结果,但返回{{1}选择属性时。我可以调用XdmItem.getStringValue()来获取string value,这会为我获取属性的正确值,但会返回元素的文本内容。

Michael Kay之前已said "Saxon's s9api interface ... returns XdmValue objects whose type you can interrogate"。我可以看到我可以执行name="value"检查以确定它是instanceofXdmAtomicValueXdmExternalObject还是XdmFunctionItem,但元素和属性是XdmNode的两个实例。我如何区分这两者?

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

1 个答案:

答案 0 :(得分:3)

我在写完问题时就找到了答案,所以我会为其他人分享。

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

XdmNode