首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从xPath创建NodeInfo语句?

如何从xPath创建NodeInfo语句?
EN

Stack Overflow用户
提问于 2015-11-30 18:17:10
回答 1查看 197关注 0票数 1

我使用的是S9API和Saxon9.7HE,我有一个NodeInfo对象。我需要创建一个唯一对应于这个xPath的NodeInfo语句。很容易获得前缀、节点名和父级:

代码语言:javascript
复制
String prefix = node.getPrefix();
String localPart = node.getLocalPart();
NodeInfo parent = node.getParent();

这样我就可以走上树,边走边建xPath。但我找不到的是获取位置谓词信息的任何方法。IOW,创建以下内容是不够的:

代码语言:javascript
复制
/persons/person/child

因为它可能匹配多个子元素。我需要创造:

代码语言:javascript
复制
/persons/person[2]/child[1]

它只匹配一个子元素。对如何获取位置谓词信息有什么想法吗?或者有更好的方法来做这件事?

顺便说一句,对于那些使用通用DOM而不是S9API的人来说,下面是一个简单的解决方案:http://practicalxml.sourceforge.net/apidocs/net/sf/practicalxml/DomUtil.html#getAbsolutePath(org.w3c.dom.Element)

编辑:@Michael的答案有效。给它加些肉:

代码语言:javascript
复制
XPathExpression xPathExpression = xPath.compile("./path()");
List matches = (List) xPathExpression.evaluate(node, XPathConstants.NODESET);
String pathToNode = matches.get(0).toString();
// If you want to remove the expanded QName syntax:
pathToNode = pathToNode.replaceAll("Q\\{.*?\\}", "");

这必须使用以前用于获取xPath对象的同一个NodeInfo对象来完成。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-30 18:20:55

在XPath 3.0中,您可以使用fn:path()。

早期的Saxon版本提供了saxon:path()。

这里的挑战是处理名称空间。fn: path ()通过使用新的展开-QName语法返回对命名空间前缀绑定不敏感的路径

代码语言:javascript
复制
/Q{}persons/Q{}person[2]/Q{}child[1]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34005288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档