如何用内联xmlns声明替换XML名称空间前缀?

西德尼

我有两个XML对象,我相信它们描述了同一实体,一个使用命名空间前缀,一个使用内联命名空间声明。我想对它们进行比较,但是表示名称空间的不同方式几乎不可能。

如何获取下面的第一个xml代码段并将其更改为与第二个代码段匹配?

<!--I want to take data that looks like this-->
<Foo xmlns:e="http://schemas.cch.com/FooBar/MDS/2007/12/04/Foo">
  <e:Description></e:Description>
  <e:Name i:nil="true"></e:Name>
  <e:DisplaySeqNo>0</e:DisplaySeqNo>
</Foo>

<!--I want to make that data that looks like this-->
<Foo>
  <Description xmlns="http://schemas.cch.com/FooBar/MDS/2007/12/04/Foo"></Description>
  <Name i:nil="true" xmlns="http://schemas.cch.com/FooBar/MDS/2007/12/04/Foo"></Name>
  <DisplaySeqNo xmlns="http://schemas.cch.com/FooBar/MDS/2007/12/04/Foo">0</DisplaySeqNo>
</Foo>

区分它们的要求是手动调试过程的一部分,因此,我对Web工具,脚本或其他工具感到满意。我不打算定期执行此操作,但是我想弄清楚xml样本A与xml样本B有何不同。

zx485

您可以使用以下XSLT-1.0样式表。它是Identity模板(复制所有节点)和两个处理替换情况的模板的组合:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:e="http://schemas.cch.com/FooBar/MDS/2007/12/04/Foo">
    <xsl:output method="xml" indent="yes"/>

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

    <xsl:template match="Foo">
      <xsl:element name="{local-name()}" namespace="">
        <xsl:apply-templates select="node()|@*" />
      </xsl:element>
    </xsl:template>

    <xsl:template match="e:*">
      <xsl:element name="{local-name()}" namespace="http://schemas.cch.com/FooBar/MDS/2007/12/04/Foo">
        <xsl:apply-templates select="node()|@*" />
      </xsl:element>
    </xsl:template>    

</xsl:stylesheet>

其输出为:

<Foo>
  <Description xmlns="http://schemas.cch.com/FooBar/MDS/2007/12/04/Foo"/>
  <Name xmlns="http://schemas.cch.com/FooBar/MDS/2007/12/04/Foo" i:nil="true"/>
  <DisplaySeqNo xmlns="http://schemas.cch.com/FooBar/MDS/2007/12/04/Foo">0</DisplaySeqNo>
</Foo>

它还会为XML文件产生错误,因为i未在其中定义名称空间。它还从输入XML复制了注释,但是我想那只是为了说明的注释,因此可以忽略。

如果您使用的是Linux,则可以轻松地将此模板传递给xsltproc

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

未前缀子元素的XML名称空间,其中父元素已声明xmlns:prefix

来自分类Dev

警告:此页面需要使用前缀XXX声明的XML名称空间http://xmlns.jcp.org/jsf/XXX,但该名称空间不存在标记库

来自分类Dev

使用FOR XML EXPLICIT时删除xmlns =“”名称空间声明

来自分类Dev

如何用xslt替换名称空间uri

来自分类Dev

如何控制XML中的名称空间前缀?

来自分类Dev

XSL如何从HTML输出中摆脱xmlns名称空间声明?

来自分类Dev

在XML 1.1中取消声明名称空间和“已声明前缀”名称空间约束

来自分类Dev

如何使用声明的名称空间创建XML?

来自分类Dev

XML名称空间前缀错误

来自分类Dev

如何使用XSLT替换XML中的前缀和命名空间

来自分类Dev

查找未声明的名称空间的前缀

来自分类Dev

如何使用Xstream从xml删除名称空间前缀?

来自分类Dev

如何通过前缀获取xml文件的名称空间(常规)

来自分类Dev

内联名称空间和含糊的声明

来自分类Dev

WPF声明使用声明的xmlns嵌套名称空间

来自分类Dev

在Eclipse的XHTML + XML文件中搜索并替换XML名称空间前缀

来自分类Dev

“此页面要求使用前缀p声明的XML名称空间,但该名称空间不存在标记库。”

来自分类Dev

如何使用“纯DOM”在根标记处设置名称空间(xmlns)声明?

来自分类Dev

声明MathML的XML名称空间

来自分类Dev

XML名称空间前缀冲突的XPath行为

来自分类Dev

获取XML元素的名称空间前缀和名称空间绑定

来自分类Dev

如何通过VB.net在XML中构建名称空间xmlns,xmlns:xsi和模式xsi:schemalocaton?

来自分类Dev

如何删除属性的名称空间前缀?

来自分类Dev

如何在JAVA中编码默认名称空间和带有单个XML元素前缀的名称空间

来自分类Dev

如何在JAVA中编码默认名称空间和带有单个XML元素前缀的名称空间

来自分类Dev

指定名称空间后,通过指针内联声明对象

来自分类Dev

解组具有xmlns名称空间的xml文档

来自分类Dev

如何在Java DOM XML构建器中添加名称空间前缀

来自分类Dev

如何在PHP中使用SimpleXMLElement生成以名称空间为前缀的xml元素

Related 相关文章

  1. 1

    未前缀子元素的XML名称空间,其中父元素已声明xmlns:prefix

  2. 2

    警告:此页面需要使用前缀XXX声明的XML名称空间http://xmlns.jcp.org/jsf/XXX,但该名称空间不存在标记库

  3. 3

    使用FOR XML EXPLICIT时删除xmlns =“”名称空间声明

  4. 4

    如何用xslt替换名称空间uri

  5. 5

    如何控制XML中的名称空间前缀?

  6. 6

    XSL如何从HTML输出中摆脱xmlns名称空间声明?

  7. 7

    在XML 1.1中取消声明名称空间和“已声明前缀”名称空间约束

  8. 8

    如何使用声明的名称空间创建XML?

  9. 9

    XML名称空间前缀错误

  10. 10

    如何使用XSLT替换XML中的前缀和命名空间

  11. 11

    查找未声明的名称空间的前缀

  12. 12

    如何使用Xstream从xml删除名称空间前缀?

  13. 13

    如何通过前缀获取xml文件的名称空间(常规)

  14. 14

    内联名称空间和含糊的声明

  15. 15

    WPF声明使用声明的xmlns嵌套名称空间

  16. 16

    在Eclipse的XHTML + XML文件中搜索并替换XML名称空间前缀

  17. 17

    “此页面要求使用前缀p声明的XML名称空间,但该名称空间不存在标记库。”

  18. 18

    如何使用“纯DOM”在根标记处设置名称空间(xmlns)声明?

  19. 19

    声明MathML的XML名称空间

  20. 20

    XML名称空间前缀冲突的XPath行为

  21. 21

    获取XML元素的名称空间前缀和名称空间绑定

  22. 22

    如何通过VB.net在XML中构建名称空间xmlns,xmlns:xsi和模式xsi:schemalocaton?

  23. 23

    如何删除属性的名称空间前缀?

  24. 24

    如何在JAVA中编码默认名称空间和带有单个XML元素前缀的名称空间

  25. 25

    如何在JAVA中编码默认名称空间和带有单个XML元素前缀的名称空间

  26. 26

    指定名称空间后,通过指针内联声明对象

  27. 27

    解组具有xmlns名称空间的xml文档

  28. 28

    如何在Java DOM XML构建器中添加名称空间前缀

  29. 29

    如何在PHP中使用SimpleXMLElement生成以名称空间为前缀的xml元素

热门标签

归档