我正在尝试使用以下命名空间转换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来实现?
我可以通过在默认名称空间(最后一个)中添加前缀来使其工作,但是如何在不添加前缀的情况下输出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)
| 归档时间: |
|
| 查看次数: |
8547 次 |
| 最近记录: |