讓我們說我有這個輸入文件更換一個節點的價值
<root>
<keyword>
<name>foo</name>
<value>bar</value>
</keyword>
<keyword>
<name>123</name>
<value>456</value>
</keyword>
</root>
,我想這樣的輸出:
<root>
<keyword>
<name>foobar</name>
<value>bar</value>
</keyword>
<keyword>
<name>123</name>
<value>456</value>
</keyword>
</root>
現在,我有這樣的工作轉變,但我想知道如何使其更加優雅。
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<!-- copy all nodes and attributes -->
<xsl:template match="@*|node()" name = "identity">
<xsl:copy >
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match = "/root/keyword/name[text() = 'foo']">
<name>foobar</name>
</xsl:template>
</xsl:stylesheet>
匹配所需的節點後,我再次重複設置它,而不是簡單地將其替換。我可以更優雅地做到這一點嗎?我的要求可能聽起來有些荒謬,但我想更深入地瞭解xslt並更好地理解。
非常感謝!
我會將'match =「/ root/keyword/name [text()='foo']」'縮短爲'match =「/ root/keyword/name [。='foo']」'。您需要添加更多詳細信息,例如前綴'calypso'的名稱空間聲明,以便我們可以更多地改進代碼。 – 2014-12-02 18:06:42
我已經移除了名稱空間,這是在轉換中的一個位置聲明的(我錯誤,忘記刪除)。除此之外,輸入和轉換都是我的文件的逐字副本,沒有聲明額外的名稱空間。謝謝! – 2014-12-02 18:38:09