.net – 从XSLT输出根删除XML名称空间声明?

前端之家收集整理的这篇文章主要介绍了.net – 从XSLT输出根删除XML名称空间声明?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
具有以下输入 XML
  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <customSettings xmlns:env="urn:schemas-test-env">
  3. <connectionStrings>
  4. <add name="Name" connectionString="None" providerName="" />
  5. <add name="Name" connectionString="Local" providerName="" env:name="Local" />
  6. <add name="Name" connectionString="Dev" providerName="" env:name="Dev" />
  7. </connectionStrings>
  8. <appSettings>
  9. <add key="Name" value="Value" />
  10. <add key="Name" value="Local" env:name="Local" />
  11. <add key="Name" value="Dev" env:name="Dev" />
  12. </appSettings>
  13. </customSettings>

和XSLT:

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <xsl:stylesheet version="1.0"
  3. xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  4. xmlns:msxsl="urn:schemas-microsoft-com:xslt"
  5.  
  6. xmlns:code="urn:schemas-test-code"
  7. xmlns:env="urn:schemas-test-env"
  8. >
  9. <xsl:output version="1.0" encoding="utf-8" omit-xml-declaration="yes" indent="yes" />
  10. <xsl:strip-space elements="*" />
  11.  
  12. <!-- Populate param value -->
  13. <xsl:param name="env" select="code:GetEnvironment()" />
  14.  
  15. <!-- Copy content as is -->
  16. <xsl:template match="node()|@*" name="identity">
  17. <xsl:copy>
  18. <xsl:apply-templates select="node()|@*" />
  19. </xsl:copy>
  20. </xsl:template>
  21.  
  22. <!-- Remove all add nodes with env:name not matching param -->
  23. <xsl:template match="add">
  24. <xsl:if test="not(@env:name != $env)">
  25. <xsl:call-template name="identity" />
  26. </xsl:if>
  27. </xsl:template>
  28.  
  29. <!-- Remove all env:name attributes -->
  30. <xsl:template match="@env:name" />
  31. </xsl:stylesheet>

我得到以下输出XML:

  1. <customSettings xmlns:env="urn:schemas-test-env">
  2. <connectionStrings>
  3. <add name="Name" connectionString="None" providerName="" />
  4. <add name="Name" connectionString="Local" providerName="" />
  5. </connectionStrings>
  6. <appSettings>
  7. <add key="Name" value="Value" />
  8. <add key="Name" value="Local" />
  9. </appSettings>
  10. </customSettings>

如何从根元素中删除命名空间声明?

如果您替换此模板:
  1. <!-- Copy content as is -->
  2. <xsl:template match="node()|@*" name="identity">
  3. <xsl:copy>
  4. <xsl:apply-templates select="node()|@*" />
  5. </xsl:copy>
  6. </xsl:template>

有了这两个模板:

  1. <!-- Copy elements without copying their namespace declarations -->
  2. <xsl:template match="*" name="identity">
  3. <xsl:element name="{name()}">
  4. <xsl:apply-templates select="node()|@*" />
  5. </xsl:element>
  6. </xsl:template>
  7.  
  8. <!-- Copy content as is -->
  9. <xsl:template match="node()|@*" priority="-2">
  10. <xsl:copy>
  11. <xsl:apply-templates select="node()|@*" />
  12. </xsl:copy>
  13. </xsl:template>

那应该这样做.

猜你在找的XML相关文章