XSLT 更改元素中的名称空间

2023-12-02

我正在尝试使用以下 xsl 代码更改元素属性的命名空间:

<xsl:stylesheet version='2.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:ns2="http://www.ean-ucc.org/schemas/1.3.1/eanucc"> 
    <xsl:output encoding='UTF-8' indent='yes' method='xml'/>

    <!-- copy everything into the output -->
    <xsl:template match='@*|node()'>
        <xsl:copy>
            <xsl:apply-templates select='@*|node()'/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="IRenvelope">
        <IRL xmlns:xsd="http://www.xx.com">
            <xsl:copy-of select="node()|@*"/>
        </IRL>
    </xsl:template>
</xsl:stylesheet>

我用于测试的 xml 消息是:

<GMessage xmlns="http://www.giffgaff.uk/CM/envelope">
<EnvelopeVersion>2.0</EnvelopeVersion>
  <body>
    <IRenvelope xmlns="http://www.mnv.com/elc/sap">
            <Keys>
                <Key Type="TaxOfficeNumber">635</Key>
            </Keys>
        </IRenvelope>
   </body>
 </GMessage>

我无法让它工作,命名空间没有改变,但提供了相同的结果。有什么帮助吗?

输出的xml如下:

     <GMessage xmlns="http://www.giffgaff.uk/CM/envelope">
         <EnvelopeVersion>2.0</EnvelopeVersion>
           <body>
             <IRenvelope xmlns="http://www.xx.com">
               <Keys>
                  <Key Type="TaxOfficeNumber">635</Key>
                </Keys>
               </IRenvelope>
            </body>
       </GMessage>

下面的 XSLT 将帮助您获得所需的结果:

<xsl:stylesheet
    version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xsd="http://www.xx.com"
    xmlns:ns="http://www.mnv.com/elc/sap"
    exclude-result-prefixes="ns"> 
    <xsl:output encoding='UTF-8' indent='yes' method='xml'/>

    <!-- copy everything into the output -->
    <xsl:template match='@*|node()'>
        <xsl:copy>
            <xsl:apply-templates select='@*, node()'/>
        </xsl:copy>
    </xsl:template>

    <!-- template to match ns:IRenvelope element and creating a new element -->
    <xsl:template match="ns:IRenvelope">
        <xsl:element name="IRL" namespace="http://www.xx.com">
            <xsl:apply-templates select="@*, node()"/>
        </xsl:element>
    </xsl:template>

    <!-- template to change the namespace 
         of the elements  
         from "http://www.mnv.com/elc/sap" 
         to "http://www.xx.com" -->
    <xsl:template match="ns:*">
        <xsl:element name="{local-name()}" namespace="http://www.xx.com">
            <xsl:apply-templates select="@*, node()"/>
        </xsl:element>
    </xsl:template>

</xsl:stylesheet>

在这里,最后两个模板匹配ns:IRenvelope以及所有具有命名空间的元素http://www.mnv.com/elc/sap, 分别。使用xsl:element及其命名空间属性,我们可以使用所需的命名空间创建新元素。

您还可以使用前缀声明所需的名称空间并创建元素,如下所示:

<xsd:IRL xmlns:xsd="http://www.xx.com">
    ...
</xsd:IRL>

对于 XSLT-1.0:

只需更换,(逗号)使用|(pipe) 在 apply-templates 中使用逗号来对操作进行排序在 2.0 中受支持:

<xsl:apply-templates select="@* | node()"/>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XSLT 更改元素中的名称空间 的相关文章

  • 将 XML 映射到 C# 中的类

    我希望使用 XmlSerializer 对象将嵌套元素中的多个 XML 属性映射到单个 POCO 类中 XML
  • 将巨大的模式编译成Java

    有两个主要工具提供了将 XSD 模式编译为 Java 的方法 xmlbeans 和 JAXB 问题是 XSD 模式确实很大 30MB 的 XML 文件 大部分模式在我的项目中没有使用 所以我可以注释掉大部分代码 但这不是一个好的解决方案 目
  • 在python中读取PASCAL VOC注释

    我在 xml 文件中有注释 例如这个 它遵循 PASCAL VOC 约定
  • 解组转义 XML

    在 Go 中 我将如何解码此 XML 响应 我尝试过建立一个自定义UnMarshal方法在我的Answerstruct 但我运气不太好
  • XPath 中的 ., 有什么用?

    为什么在某些 XPath 表达式中句号后面使用逗号 这是一个例子 Set nlist doc selectNodes book author first name starts with M 我试图用谷歌搜索这个 但字面意思 运算符似乎不喜
  • 如何去除 XSL 中字符的重音符号?

    我一直在寻找 但找不到相当于字符 规范化空间 的 XSL 函数 也就是说 我的内容带有重音 UNICODE 字符 这很好 但是从该内容中 我正在创建一个文件名 但我不想要这些重音 那么 是否有一些我忽略的东西 或者没有正确地谷歌搜索来轻松处
  • MSMQ接收和删除

    是否有任何选项可以在读取消息后将其从 MSMQ 中删除 比如 接收 删除可以作为原子操作运行吗 听起来您想查看下一条消息 然后在处理完成后接收它 Message message Queue Peek Queue ReceiveById me
  • SpreadsheetML 文件扩展名被 IE 和 FF 更改 - 内容类型错误?

    我正在 PHP 中生成 SpreadsheetML 文件 当用户下载文件并保存时 默认情况下文件会另存为 Report xml 并在 Excel 中打开 但是 如果选择在 Excel 中打开文件而不是保存文件 则文件名将更改为 Report
  • 如何在另一个 XML 中使用 CDATA 中包装的 XML 进行 XSL 转换?

    XML 文档包含另一个 XML 元素 该元素包装在 CDATA 中 包装的 XML 如何用于 XSL 和 XSL FO 转换 版本 1 如果您愿意采取多个转型步骤 那么这是可能的 使用disable output escaping输出相关部
  • 我想在java中使用XQuery进行Xml处理

    我想用XQuery用于从 java 中的 Xml 获取数据 但我没有得到需要为此添加哪个 Jar 我在谷歌上搜索了很多 但没有得到任何有用的例子 例如我得到以下链接 https docs oracle com database 121 AD
  • Android - 保存动态更改布局的状态

    我有一个布局 用户可以在其中添加按钮并将其放置在他们想要的位置 我想允许用户保存他们的布局 以便下次打开应用程序时加载它 有谁知道我是否可以将文件保存到 SD 卡上 或者 我可以使用某种layout getXml 方法并将其放入我的应用程序
  • 生成 XML 时如何保留 CDATA 中的换行符?

    我想写一些包含空格字符的文本 例如newline and tab到一个xml文件中 所以我使用 Element element xmldoc createElement TestElement element appendChild xml
  • XSLT:选择与其他示例不同但略有不同的

    我有以下 XML a b b a
  • 将 LINQ 嵌套到 XML

    我有一些来自遗留应用程序的非标准 XML
  • 合并xml文档

    我遇到的所有关于合并 XML 文档的解决方案都无法实现我的愿望 让我解释 XML 文档 1 a b title Original Section b title Original Child Section b b title Origin
  • 从基本表单加上 XML 生成自定义表单文档?

    这是我的第一次堆栈溢出 而且很复杂 对不起 我的任务是从基本模板和一些 XML 生成自定义文档without每种情况都有一个自定义表单设计元素 Here s 整个画面 我们正在构建一个 Lotus Notes 客户端 而不是 Web 应用程
  • Ebay api GetSellerList,解析响应 XML

    我正在使用 eBay 交易 api 来获取当前列出的卖家股票 我正在使用 GetSellerList 调用 我在解析 xml 时遇到问题 然后将其插入到网站商店中 这是 xml 请求
  • Dispatcher-servlet 无法映射到 websocket 请求

    我正在开发一个以Spring为主要框架的Java web应用程序 特别使用Spring core Spring mvc Spring security Spring data Spring websocket 像这样在 Spring 上下文
  • 基于xsd模式生成xml(使用.NET)

    我想根据我的 xsd 架构 cap xsd 生成 xml 文件 我找到了这篇文章并按照说明进行操作 使用 XSD 文件生成 XML 文件 https stackoverflow com questions 6530424 generatin
  • JAXB - 列表<可序列化>?

    我使用 xjc 制作了一些课程 public class MyType XmlElementRefs XmlElementRef name MyInnerType type JAXBElement class required false

随机推荐