XSLT使用默认命名空间转换XML而不添加前缀?

Pau*_*l L 8 .net xml xslt

我正在尝试使用以下命名空间转换XML文件,但无法找到一种方法使其使用默认命名空间而不向输出XML添加前缀.

原始XML文件:

<pExport xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://workflow.converga.com.au/compass">  
Run Code Online (Sandbox Code Playgroud)

我可以通过向默认命名空间(最后一个)添加前缀来使其工作,但是如何在不添加前缀的情况下输出XML,可以通过在.NET 4中使用XslCompiledTransform来实现?

Dim*_*hev 5

我可以通过在默认名称空间(最后一个)中添加前缀来使其工作,但是如何在不添加前缀的情况下输出XML,可以通过在.NET 4中使用XslCompiledTransform来实现呢?

这是一个具体的示例如何执行此操作:

此转换

<xsl:stylesheet version="1.0"
 xmlns="http://workflow.converga.com.au/compass"
 xmlns:c="http://workflow.converga.com.au/compass"
 xmlns:ext="http://exslt.org/common"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 exclude-result-prefixes="c ext xsl">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:param name="pnewItem">
  <item name="wine">
   <price>3</price>
   <quantity>5000</quantity>
  </item>
 </xsl:param>

 <xsl:template match="node()|@*" name="identity">
  <xsl:copy>
   <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
 </xsl:template>

 <xsl:template match="c:item[last()]">
  <xsl:call-template name="identity"/>
  <xsl:copy-of select="ext:node-set($pnewItem)/*"/>
 </xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

在以下XML文档上与XslCompiledTransform一起应用时

<pExport xmlns="http://workflow.converga.com.au/compass">
 <Goods>
  <item name="tobacco">
   <price>5</price>
   <quantity>1000</quantity>
  </item>
 </Goods>
</pExport>
Run Code Online (Sandbox Code Playgroud)

生成所需的(添加了新项目的相同XML文档),正确的结果

<pExport xmlns="http://workflow.converga.com.au/compass">
  <Goods>
    <item name="tobacco">
      <price>5</price>
      <quantity>1000</quantity>
    </item>
    <item name="wine">
      <price>3</price>
      <quantity>5000</quantity>
    </item>
  </Goods>
</pExport>
Run Code Online (Sandbox Code Playgroud)