java - 从 org.w3c.dom.Node 获取 Xpath

标签 java xml dom

我可以从 org.w3c.dom.Node 获取完整的 xpath 吗?

说当前节点正指向xml文档中间的某个地方。我想提取该元素的 xpath。

我正在寻找的输出 xpath 是 //parent/child1/chiild2/child3/node。节点 xpath 的父节点。只需忽略具有表达式并指向同一节点的 xpath。

最佳答案

没有获取 XPath 的通用方法,主要是因为没有一个通用 XPath 可以标识文档中的特定节点。在某些模式中,节点将由属性唯一标识(idname 可能是最常见的属性。)在其他模式中,每个元素的名称(即标签)足以唯一地标识一个节点。在少数(不太可能,但可能)情况下,没有一个唯一的名称或属性可以将您带到特定节点,因此您需要使用基数(获取第 m 个子节点的第 n 个子节点。 ..)。

编辑: 在大多数情况下,创建一个依赖于模式的函数来为给定节点组装 XPath 并不难。例如,假设您有一个文档,其中每个节点都由 id 属性唯一标识,并且您没有使用命名空间。然后(我认为)下面的伪 Java 将根据这些属性返回一个 XPath。 (警告:我还没有测试过这个。)

String getXPath(Node node)
{
    Node parent = node.getParent();
    if (parent == null) {
        return "/" + node.getTagName();
    }
    return getXPath(parent) + "/" + "[@id='" + node.getAttribute("id") + "']";
}

关于java - 从 org.w3c.dom.Node 获取 Xpath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5046174/

相关文章:

java - Libgdx 屏幕不交换

java - java返回XML结构中重复标签的列表

java - SAX 解析器不接受返回的 XML 数据

javascript - 买了玩不了的闲置游戏

javascript - 使用输入中的文本添加多种样式的 div

java - 将对象(包括 lambda)转换为 JSON,反之亦然

java - 未使用原始类型时发生原始类型错误

java - 在 Linux OpenSuse cron 上,脚本运行,但只生成空日志

xml - XPath child::* 与 child::node()

javascript - 您能否以编程方式将标签链接到不带字符串 id 的表单输入?