這是我第一次用XSLT或XML做任何事情,所以請原諒。我發現XSLT Web文檔非常簡潔。將XSLT用作XML預處理器
我有一個XML文件,我想處理基於一組輸入定義來選擇性地刪除內容。該行爲應該類似於處理ifdef塊的簡單代碼預處理器。
我已經制定了如何做到如下,但一些部分,如「內容」變量似乎不是最好的方式來處理這個。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" />
<xsl:param name="defines-uri" required="yes"/>
<xsl:template match="* | @*">
<xsl:copy><xsl:copy-of select="@*"/><xsl:apply-templates/></xsl:copy>
</xsl:template>
<xsl:template match="ifdef">
<xsl:variable name="contents" select="child::node()"/>
<xsl:variable name="defines" select="document($defines-uri)/defines"/>
<xsl:variable name="val" select="@select"/>
<xsl:for-each select="$defines">
<xsl:if test="def=$val">
<xsl:apply-templates select="$contents"/>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
主要問題是在定義中找到匹配的情況下應用模板。如果沒有內容,我會在輸出中獲得不同程度的定義文檔。
什麼是無需轉換就可以進行XML預處理的最佳方式?
示例XML文檔和預期輸出將非常有用。 – Tomalak