2009-02-25 96 views
90

在XSLT存在是否有XSLT名稱元素?

<xsl:value-of select="expression"/> 

得到一個元素的值,但有一些選擇的元素的標籤名稱?

在這樣的情況:

<person> 
    <!-- required stuff --> 
    <name>Robert</name> 
    <!-- optional stuff, free form for future extension. 
     Using XMLSchema's xsd:any --> 
    <profession>programmer</profession> 
    <hobby>photography</hobby> 
</person> 

<xsl:for-each select="person"> 
    <xsl:tag-of select="."/> : <xsl:value-of select="."/> 
</xsl:for-each> 

爲了得到輸出是這樣的:

name : Robert 
profession : programmer 
hobby : photography 

當然上面的XSLT不能編譯,因爲

<xsl:tag-of select="expression"/> 

不存在。但是,這怎麼可能呢?

+0

這個問題最相關的標籤是XPath。這兩個函數都是XPath標準函數,可以在任何託管語言(C#,XSLT,XQuery,...)的上下文中用於XPath表達式中。請重新標記 – 2009-02-25 17:09:27

+0

本文內容:「在XSLT中,有 < xsd:value-of select =「表達式」/>「 - 包含錯誤。 XSLT指令通常使用的前綴是「xsl」。通常當使用XML Schema時,我們使用前綴「xsd」或「xs」。請改正。 – 2009-02-25 20:17:30

+0

謝謝,那些需要修復。 – 2009-02-26 00:30:13

回答

139

這會給你當前元素的名稱(標籤名)

<xsl:value-of select ="name(.)"/> 

OP-編輯:這也將這樣的伎倆:

<xsl:value-of select ="local-name()"/> 
+11

local-name是你想要的東西中的9倍 – annakata 2009-02-25 09:22:15

6
<xsl:value-of select="name(.)" /> : <xsl:value-of select="."/> 
13
<xsl:for-each select="person"> 
    <xsl:for-each select="*"> 
    <xsl:value-of select="local-name()"/> : <xsl:value-of select="."/> 
    </xsl:for-each> 
</xsl:for-each> 
93

沒有人指出函數的語義的細微差別和local-name()

  • name(someNode)返回節點的完整 名稱,以及包括 前綴和結腸的情況下,該節點 是元素還是屬性。
  • local-name(someNode)僅返回 節點的本地名稱,以及 不包括前綴和結腸 萬一節點是一個元素或屬性 。

因此,在名稱可能屬於兩個不同名稱空間的情況下,必須使用name()函數才能區分這些名稱。

而且,順便說一句,可以不帶任何參數同時指定功能:

name()name(.)

local-name()的縮寫爲local-name(.)

的縮寫

最後,請記住,不僅元素和屬性有名稱,這兩個函數也可以在PI上使用,並在這些它們是相同的)。

7

對於那些有興趣,有沒有:

<xsl:tag-of select="."/> 

轉到但是你可以重新創建標籤/元素:

<xsl:element name="{local-name()}"> 
    <xsl:value-of select="substring(.,1,3)"/> 
</xsl:element> 

這是一個XSLT模板有用的,例如手柄爲許多不同的元素格式化數據值。如果您不知道正在處理的元素的名稱,並且仍然可以輸出相同的元素,並根據需要修改該值。

相關問題