これはおそらくUsing XSLT as an XML preprocessorのほぼカーボン コピーですが、その質問の OP は完全な例を投稿しなかったため、求められたにもかかわらず、応答は XSLT に精通していない人には役に立ちません。どちらも広範囲にわたる Web 検索は役に立ちませんでした。XSLT の文書化は著しく不十分であり、Web 上ではほとんど議論されていないようです。
ともかく ...
次のようなXMLファイル、たとえばfoo.xmlがあります(明らかに大幅に簡略化されています):
<?xml version="1.0" encoding="UTF-8"?>
<main>
<fee>blah</fee>
<ifdef select="OLD_VERSION">
<fi>blah blah</fi>
</ifdef>
</main>
(C スタイルの #ifdef は、Ian Roberts の回答に照らして "ifdef" ブロックに変更されました)
次のように、Linux で xsltproc コマンドを実行したいと考えています。
xsltproc --stringparam xmlver NEW_VERSION --nonet foo.xslt foo.xml
そして、次の XSLT ファイル foo.xslt を使用して #ifdef セクションを除外します。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" />
<xsl:param name="xmlver" required="yes"/>
<xsl:template match="node() | @*">
<xsl:copy><xsl:apply-templates select="node() | @*"/></xsl:copy>
</xsl:template>
<xsl:variable name="defines" select="document($xmlver)/defines"/>
<xsl:template match="ifdef">
<xsl:variable name="this" select="."/>
<xsl:for-each select="$defines[def = $this/@select]">
<xsl:apply-templates select="$this/node()" />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
(上記の質問への回答を使用して、この XSLT を作成しました。ただし、欠落している要素は、「xmlver」値をどこにどのように組み込むかです。もちろん、上記が正しいという保証はありません。しかし、これは本質的に私が質問しています - これらすべてがどのように機能するようにまとめられていますか?)
建設的な回答は非常に高く評価され、将来同様の要件を持つ多くの人々に役立つことは間違いありません。しかし、退屈で独断的な「なぜそれをしたいのですか?」はやめてください。返信します!