XSLT使用默认名称空间转换XML而不添加前缀? [英] XSLT transform XML with default namespace without adding prefix?

查看:49
本文介绍了XSLT使用默认名称空间转换XML而不添加前缀?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用以下名称空间转换XML文件,但是找不到一种方法,而不在输出XML上添加前缀的情况下使用默认名称空间.

I am trying to transform an XML file with the following namespace, but couldn't find out a way to make it working with the default namespace without adding a prefix to the output 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">  

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

I can make it working by adding a prefix to the default namespace (the last one), but how could I output a XML without adding a prefix, it is possible by using XslCompiledTransform in .NET 4 ?

推荐答案

我可以添加一个默认名称空间的前缀(最后一个),但我怎么能输出一个XML没有添加前缀,它是使用XslCompiledTransform可能在.NET 4中?

I can make it working by adding a prefix to the default namespace (the last one), but how could I output a XML without adding a prefix, it is possible by using XslCompiledTransform in .NET 4 ?

这是一个具体的示例:

此转换:

<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>

与XslCompiledTransform一起应用于以下XML文档:

<pExport xmlns="http://workflow.converga.com.au/compass">
 <Goods>
  <item name="tobacco">
   <price>5</price>
   <quantity>1000</quantity>
  </item>
 </Goods>
</pExport>

生成所需的(添加了新项目的相同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>

这篇关于XSLT使用默认名称空间转换XML而不添加前缀?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆