次の入力 XML があります。
<?xml version="1.0" encoding="utf-8" ?>
<customSettings xmlns:env="urn:schemas-test-env">
<connectionStrings>
<add name="Name" connectionString="None" providerName="" />
<add name="Name" connectionString="Local" providerName="" env:name="Local" />
<add name="Name" connectionString="Dev" providerName="" env:name="Dev" />
</connectionStrings>
<appSettings>
<add key="Name" value="Value" />
<add key="Name" value="Local" env:name="Local" />
<add key="Name" value="Dev" env:name="Dev" />
</appSettings>
</customSettings>
および XSLT:
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:code="urn:schemas-test-code"
xmlns:env="urn:schemas-test-env"
>
<xsl:output version="1.0" encoding="utf-8" omit-xml-declaration="yes" indent="yes" />
<xsl:strip-space elements="*" />
<!-- Populate param value -->
<xsl:param name="env" select="code:GetEnvironment()" />
<!-- Copy content as is -->
<xsl:template match="node()|@*" name="identity">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<!-- Remove all add nodes with env:name not matching param -->
<xsl:template match="add">
<xsl:if test="not(@env:name != $env)">
<xsl:call-template name="identity" />
</xsl:if>
</xsl:template>
<!-- Remove all env:name attributes -->
<xsl:template match="@env:name" />
</xsl:stylesheet>
次の出力 XML を取得しています。
<customSettings xmlns:env="urn:schemas-test-env">
<connectionStrings>
<add name="Name" connectionString="None" providerName="" />
<add name="Name" connectionString="Local" providerName="" />
</connectionStrings>
<appSettings>
<add key="Name" value="Value" />
<add key="Name" value="Local" />
</appSettings>
</customSettings>
ルート要素から名前空間宣言を削除するには?