2011-06-13 39 views
-1
<books> 
    <physics id="abcd"> Book1 </physics> 
    <maths> Book2 </maths> 
    <history id="pqrs">Book3 </history> 
</books> 

這個XPath表達式:XPath表達式得到上級元素的文本

select=".//@ID" 

會給我具有ID的所有節點。從那裏我需要去父節點,並獲取文本。

在上面的例子中,我需要獲得物理,歷史作爲答案。哪個xpath表達式可以給我那個結果?

+1

請使用'{}'圖標格式化您的XML – Bohemian 2011-06-13 13:39:37

+1

從您的問題看,您似乎需要節點內的文本。從下面的評論你談到獲取元素名稱與循環表達式,你不能改變......只有當你發佈一個有意義的問題,你才能得到一個工作的答案。 – 2011-06-13 14:25:16

回答

0

嘗試this

//*[@id]/text() 

//*[@id]將選擇具有@Id屬性的元素。 text()將爲您提供該元素的子文本節點。


編輯:

爲了獲得與@id屬性節點的名稱,在XSLT使用name()功能。 See this example

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" /> 

    <xsl:template match="/"> 
     <books> 
      <xsl:for-each select="//@id"> 
       <book><xsl:value-of select="name(..)" /></book> 
      </xsl:for-each> 
     </books> 
    </xsl:template> 

</xsl:stylesheet> 
+0

感謝您的回覆。但它仍然沒有解決這個問題。我在一個循環{},從這裏我需要獲取父節點的名稱。 – Alex 2011-06-13 13:58:01

+1

我已用XSLT解決方案的示例更新我的答案以獲取節點名稱。 – 2011-06-13 14:06:40

+0

再次感謝。我不能改變循環,因爲它被許多人使用,循環是。從這個循環內我需要獲取元素節點的名稱。 – Alex 2011-06-13 14:17:25

0

如果要掃描整個文件,挑選其中之一:

//*[@id]/text() 
//*[@id]/node() 

隨着//*[@id],你得到的是有一個名爲id一個屬性的所有元素節點。

隨着text(),你只能得到文本節點;與node(),你得到所有的孩子節點。

+0

感謝您的回覆。但它仍然沒有解決這個問題。我在一個循環{}中,從這裏我需要獲取父節點的名稱 – Alex 2011-06-13 14:03:07