2011-07-11 31 views
0

我必須通過XSLT轉換一個簡單的XML文件。結果應該是原始的XML輸入文件加上生成的字符串。該字符串是從XML文件中的值生成的。如何通過XSLT向文檔添加新行?

生成很簡單,但是如何將完整的原始XML內容插入到我的輸出xml中?

回答

1

這裏,XML的完整副本,使用XSLT 1.0。根據需要更改輸出編碼(本示例中爲UTF-8),並需要縮進(= yes)。

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

<xsl:output method="xml" encoding="UTF-8" indent="yes"/> 

<xsl:strip-space elements="*"/> 

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

</xsl:stylesheet> 

如果你想在最終使用添加一行文字這樣的:

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

<xsl:output method="xml" encoding="UTF-8" indent="yes"/> 

<xsl:strip-space elements="*"/> 

<!-- add a line of text at the end of the xml --> 
<xsl:template match="/"> 
    <xsl:apply-templates/> 
    <xsl:text>your line of text</xsl:text> 
</xsl:template> 

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

</xsl:stylesheet> 

請記住,最後的解決方案(與文本行)不會創建一個有效的XML!

+0

謝謝,我的情況我不關心,如果它的有效xml或不。我不明白的是爲什麼在複製過程之前調用創建附加行的部分。不該相反嗎? – martin

+1

模板與相關節點匹配。先寫哪個並不重要。節點'/'是根節點(每個xml都有一個根節點)。在這個根節點中,我們將模板應用於所有子節點和屬性。這些屬性和子元素通過'@ * | node()'與模板匹配。而這個模板我們複製一切,並將匹配的模板再次應用到所有的屬性和節點(所以它自己調用)。 – therealmarv

0

您可能希望直接在基節點或xml文件上使用copy-of元素。

例如, <xsl:copy-of select="document('style.xml')/"/>

相關問題