我想知道如何在遵守某些條件的情況下使用XSLT將節點向上移動一個級別。舉個例子,看看下面的XML源代碼:XSLT:將節點向上移動
<Settings>
<String [...]>
<Boolean [...]/>
</String>
</Settings>
這就是我作爲起始情況的XML。清楚的是,節點名稱「Settings」,「String」,「Boolean」是我們定義的特殊節點。
問題是「布爾」節點不允許在「字符串」節點內部。這就是爲什麼我必須將這些「布爾」節點升級。所需的XML是這樣的:
<Settings>
<String [...]></String>
<Boolean [...]/>
</Settings>
的XSLT還擁有具有同級布爾節點,無論在XML樹中的位置的每個字符串節點的工作。
到目前爲止,我瞭解到,你必須首先使用「身份規則」拷貝所有的XML,然後運用一些特殊的規則所期望的轉變:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:fn="http://www.w3.org/2005/xpath-functions">
<!-- Identity rule -->
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<!-- special rules ... -->
</xsl:stylesheet>
我掙扎的東西是規則將所有「布爾」節點(它們是「字符串」節點的同級節點)向上移動一級。我怎樣才能做到這一點?!?
好問題,+1。查看我的答案,瞭解「覆蓋身份規則」設計模式的變體 - 我提供了更準確的覆蓋。 :) – 2011-01-24 14:17:50