Java 如何区分从Saxon XPathSelector返回的属性节点和元素节点
给定XML:Java 如何区分从Saxon XPathSelector返回的属性节点和元素节点,java,xpath,saxon,s9api,Java,Xpath,Saxon,S9api,给定XML: <root name="value"> <level1> <level2>Text</level2> </level1> </root> 我使用的是Java中Saxon 9.6的a9api接口 我发现我可以调用来获取XPath计算结果的XML序列化,这会获得选择元素所需的结果,但在选择属性时返回name=“value”。我可以调用来获取,它为属性获取正确的值,但返回元素的文本内容 迈克尔·凯以
<root name="value">
<level1>
<level2>Text</level2>
</level1>
</root>
我使用的是Java中Saxon 9.6的a9api接口
我发现我可以调用来获取XPath计算结果的XML序列化,这会获得选择元素所需的结果,但在选择属性时返回name=“value”
。我可以调用来获取,它为属性获取正确的值,但返回元素的文本内容
迈克尔·凯以前也有过这样的经历。我可以看到,我可以执行instanceof
检查,以确定它是否是xdmotomicvalue
、XdmExternalObject
、XdmFunctionItem
或XdmNode
,但元素和属性都是XdmNode
的实例。我如何区分这两者
(我无法修改XPath,因为它们是由用户提供的。)我在写完问题后发现了答案,因此我将与其他人分享 将
XdmItem
强制转换为XdmNode
后,可以调用,该调用从枚举返回一个值,指定它是哪种类型的节点:
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();
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();