2014-01-29 86 views
0

是否可以找到XML或XHTML文件的任何特定節點的xpath?java:查找特定節點的絕對路徑

對於(例如)

<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

真正的問題是:*爲什麼*你想要該節點的XPath? – Tomalak

回答

1

在XPath 3.0有哪些呢大概你想要什麼,雖然沒有精確(在處理器應該怎麼知道你想要的謂詞[@id="c"]包括在內?)函數路徑()

這是很容易在XSLT做這樣的事情:

<xsl:template match="*[@id]" mode="path"> 
    <xsl:next-match/> 
    <xsl:value-of select="concat('[@id=&quot;', @id, '&quot;]')"/> 
</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或重寫。儘管如此,對於一個完全一般的解決方案,您需要擔心命名空間,並且您對命名空間所做的工作取決於您首先想要的路徑的原因:它是面向讀者還是軟件?