2012-02-08 45 views
0

我有一個包含大約25個元素的XML文件。我只想轉換2個元素並保留其餘的XML。有人可以告訴我該怎麼做。所有在線的例子都是修改整個XML文檔,我不想要這個。我只想修改兩個元素的值。如何使用XSL修改小部分的XML

+2

這兩個元素是如何唯一標識的?發佈了一個xml樣本。 – Kristofer 2012-02-08 12:29:42

+0

發佈示例XML,以及您希望將這2個元素轉換爲什麼? – 2012-02-08 13:18:20

回答

0

下面是一個實際的例子,我解析一個xsd文件並從中刪除所有註釋。

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

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

<!-- but remove annotations --> 
<xsl:template match="xs:annotation"/> 
6

這些任務是通過使用身份變換模板是

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

,然後通過添加模板的元件被例如改變解決

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

foo改變到bar元件和/或

<xsl:template match="foobar"/> 

刪除foobar元件。

爲了讓大家進一步的例子,例如,如果我們想複製baz元素與他們的內容,但想添加一個new元素,我們可以添加模板

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

只要你保持身份轉換alive(使用apply-templates)爲任何你不想改變的東西,你可以通過爲每個要改變的元素編寫一個模板來很好地構建你的樣式表。

+0

謝謝!它的工作。 – Chandu 2012-02-10 06:37:40