2011-12-10 56 views
2

在XSLT上,是否有簡單的方法輸出變量的所有內容?XSL輸出everythin包括節點名稱,屬性,文本

我的變量是這樣的:

<node a="a"> 
    a 
    <node> 
    b 
    </node> 
</node> 

所以我想輸出它,因爲它包括標籤名稱,屬性,文本等

謝謝!

AND:

是有可能不輸出一些標籤嗎?如

<a>aa 
<b>bb 
<c>cc</c></b></a> 

我想避免輸出b標籤,但想輸出c?謝謝!

+0

你是什麼意思的「輸出」?你的意思是「包含在結果文件中」? –

+0

是的,對不起,我不習慣功能性編程可能會用錯詞:) – Ataman

回答

3
<xsl:copy-of select="$variable"/> 
+0

有可能不輸出一些標籤嗎?如 aa bb cc。我想避免b標籤形式的輸出,但想輸出c?謝謝! – Ataman

+0

@ user446141:請參閱我的答案解決您的兩個問題。 :) –

1

好問題,+1。

這種轉變提供了答案到這兩個問題

<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="vVarNode" select="/*/node"/> 

<xsl:variable name="vVarA" select="/*/a"/> 

<xsl:template match="node()|@*"> 
    <xsl:copy> 
    <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="/"> 
    <xsl:copy-of select="$vVarNode"/> 
    =========== 

    <xsl:apply-templates select="$vVarA"/> 
</xsl:template> 

<xsl:template match="b"> 
    <xsl:apply-templates select="*"/> 
</xsl:template> 
</xsl:stylesheet> 

當此XML文檔的應用(從兩個變量是 「裝」):

<doc> 
<node a="a"> 
    a 
    <node> 
    b 
    </node> 
</node> 

<a>aa 
    <b>bb 
    <c>cc</c> 
    </b> 
</a> 
</doc> 

想要的,正確的結果產生(第一個變量的內容是「原樣」輸出,而b及其文本節點子節點從第二個變量的輸出內容中刪除):

<node a="a"> 
    a 
    <node> 
    b 
    </node> 
</node> 
    =========== 

    <a>aa 
    <c>cc</c> 
</a>