是否可以找到XML或XHTML文件的任何特定节点的xpath?
对于(例如)
<html>
<body>
<div id="a">
<div>
</div>
<div class"b">
<div>
//I want xpath of below line only
<a id="c">Here </a>
</div>
</div>
</div>
</body>
</html>
如上所示,如果我只想要<a id="c">Here </a>
行的xpath。
答案应该是: - /html/body/div/div[2]/a[@id="c"]
有可能吗?如果是的话,你能提供代码吗?提前致谢。 :)
答案 0 :(得分:1)
在XPath 3.0中有一个函数path()可以大致按你的意愿行事,虽然不是很精确(处理器应该怎么知道你想要包含谓词[@id="c"]
?)
在XSLT中很容易做到这样的事情:
<xsl:template match="*[@id]" mode="path">
<xsl:next-match/>
<xsl:value-of select="concat('[@id="', @id, '"]')"/>
</xsl:template>
<xsl:template match="*[last()!=1]" mode="path">
<xsl:next-match/>
<xsl:text>[</xsl:text>
<xsl:number/>
<xsl:text>]</xsl:text>
</xsl:template>
<xsl:template match="*" mode="path">
<xsl:apply-templates select="parent::*" mode="path"/>
<xsl:text>/</xsl:text>
<xsl:value-of select="name()"/>
</xsl:template>
如果您真的必须在Java中执行此操作,则可以从Java调用上述XSLT或重写它。但是,对于一个完全通用的解决方案,您需要担心命名空间,而您对命名空间的处理取决于您首先想要路径的原因:是针对人类读者还是针对软件?