2011-04-04 40 views
3

我正在尋找一個樣式表,它打印每個節點的名稱,包括它的值。獲取價值很簡單,但我不知道如何獲取每個節點的名稱。這裏的基本模板:XSLT:如何獲取所有節點的名稱?

<?xml version="1.0" encoding="UTF-8"?> 
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="text" encoding="UTF-8" /> 
    <xsl:template match="/"> 
     <xsl:for-each select="/"> 
     ??? 
     </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 

任何人都可以給我一個提示嗎?

謝謝, 羅伯特

+0

問得好,+1。請參閱我的答案以獲得完整的,非常簡短的解決方案:) – 2011-04-04 13:06:14

+0

只有三種節點類型的名稱:元素,屬性和命名空間節點。 – 2011-04-04 13:38:48

回答

3

這完全轉變

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 
<xsl:variable name="vQ">"</xsl:variable> 

<xsl:template match="*"> 
    <xsl:value-of select= 
     "concat(name(), ' = ', $vQ, ., $vQ, '&#xA;')"/> 
    <xsl:apply-templates select="*"/> 
</xsl:template> 
</xsl:stylesheet> 

當任何XML文檔應用,比如這個

<nums> 
    <num>01</num> 
    <num>02</num> 
    <num>03</num> 
    <num>04</num> 
    <num>05</num> 
    <num>06</num> 
    <num>07</num> 
    <num>08</num> 
    <num>09</num> 
    <num>10</num> 
</nums> 

正好產生想要的,正確的結果:

nums = "01020304050607080910" 
num = "01" 
num = "02" 
num = "03" 
num = "04" 
num = "05" 
num = "06" 
num = "07" 
num = "08" 
num = "09" 
num = "10" 
0

Name(),「返回當前節點的名稱,或在指定的節點集中的第一個節點」

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

此外,

local-name() - 「返回指定節點集中當前節點或第一個節點的名稱 - 不帶名稱空間前綴」

我想你想這樣,

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

我不知道你真正想要的,但如果我把你的要求,從字面上看,它是由滿足:

<xsl:for-each select="//node()"> 
    <node name="{name()}" value="{string(.)}"/> 
</xsl:for-each> 
0

嘗試:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="text" encoding="UTF-8"/> 
    <xsl:template match="/"> 
     <xsl:for-each select="//*"> 
      <xsl:value-of select="local-name()"/>=<xsl:apply-templates select="current()/text()"/> 
      <xsl:text>&#xa;</xsl:text> 
     </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 
相關問題