我必須通過XSLT轉換一個簡單的XML文件。結果應該是原始的XML輸入文件加上生成的字符串。該字符串是從XML文件中的值生成的。如何通過XSLT向文檔添加新行?
生成很簡單,但是如何將完整的原始XML內容插入到我的輸出xml中?
我必須通過XSLT轉換一個簡單的XML文件。結果應該是原始的XML輸入文件加上生成的字符串。該字符串是從XML文件中的值生成的。如何通過XSLT向文檔添加新行?
生成很簡單,但是如何將完整的原始XML內容插入到我的輸出xml中?
這裏,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!
您可能希望直接在基節點或xml文件上使用copy-of
元素。
例如, <xsl:copy-of select="document('style.xml')/"/>
謝謝,我的情況我不關心,如果它的有效xml或不。我不明白的是爲什麼在複製過程之前調用創建附加行的部分。不該相反嗎? – martin
模板與相關節點匹配。先寫哪個並不重要。節點'/'是根節點(每個xml都有一個根節點)。在這個根節點中,我們將模板應用於所有子節點和屬性。這些屬性和子元素通過'@ * | node()'與模板匹配。而這個模板我們複製一切,並將匹配的模板再次應用到所有的屬性和節點(所以它自己調用)。 – therealmarv