我舉兩個例子如何可以做到這一點 - 第二個是我的建議:
假設我們有這個XML文檔:
<nums>
<num>01</num>
<num>02</num>
<num>03</num>
<num>04</num>
<num>05</num>
<num>06</num>
<num>07</num>
<num>08</num>
<num>09</num>
<num>10</num>
</nums>
我們要從中產生另一個,其中具有偶數的num
元素被「刪除」。
這樣做的一種方式是:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<nums>
<xsl:apply-templates/>
</nums>
</xsl:template>
<xsl:template match="num">
<xsl:choose>
<xsl:when test=". mod 2 = 1">
<num><xsl:value-of select="."/></num>
</xsl:when>
<!-- <xsl:otherwise/> -->
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
通緝結果產生:
<nums>
<num>01</num>
<num>03</num>
<num>05</num>
<num>07</num>
<num>09</num>
</nums>
執行通知:對於 「什麼都不做」,你甚至不要不需要<xsl:otherwise>
,它被註釋掉了。
更好的解決方案:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="num[. mod 2 = 0]"/>
</xsl:stylesheet>
這產生相同的正確的結果。
在這裏,我們用一個模板匹配num
具有偶數值和空主體的元素覆蓋身份規則 - 執行「刪除」。
執行通知:
在這裏我們不使用任何「IF-THEN-ELSE」的明確指示不惜一切 - 只是Xtemplate模式匹配,這是XSLT的最顯着的特點。
在沒有提供任何代碼的情況下,很難提供特定的幫助。 – ChadNC