.net – 从XSLT输出根删除XML名称空间声明?
发布时间:2020-12-16 07:43:45 所属栏目:百科 来源:网络整理
导读:具有以下输入 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="" en
具有以下输入
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> 如何从根元素中删除命名空间声明?
如果您替换此模板:
<!-- Copy content as is --> <xsl:template match="node()|@*" name="identity"> <xsl:copy> <xsl:apply-templates select="node()|@*" /> </xsl:copy> </xsl:template> 有了这两个模板: <!-- Copy elements without copying their namespace declarations --> <xsl:template match="*" name="identity"> <xsl:element name="{name()}"> <xsl:apply-templates select="node()|@*" /> </xsl:element> </xsl:template> <!-- Copy content as is --> <xsl:template match="node()|@*" priority="-2"> <xsl:copy> <xsl:apply-templates select="node()|@*" /> </xsl:copy> </xsl:template> 那应该这样做. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |