从 XML 中删除多个 XML 命名空间

Posted

技术标签:

【中文标题】从 XML 中删除多个 XML 命名空间【英文标题】:Remove multiple XML namespaces from the XML 【发布时间】:2020-12-03 01:17:53 【问题描述】:

我必须从 XML 文件中删除多个 xml 命名空间。由于某些要求,我们正在为每条传入消息进行附加。所以在最终文件中,我们需要删除以下 XML 命名空间。 所有的命名空间都是一样的。需要删除那些重复的命名空间。

<?xml version="1.0" encoding="UTF-8"?>
<ns0:Test xmlns:ns0="urn:demo:in:file">
<Header><Name>ABC</Name>
 <no>1234</no> 
<FileName>Invoice</FileName>
</Header>
<Detail>
  <Id>
 <Type>1</Type>
 <Customerno>2</Customerno>
 <Group>3</Group>
  </Id>
 </Detail>
 </ns0:Test>
  <?xml version="1.0" encoding="UTF-8"?>
  <ns0:Test xmlns:ns0="urn:demo:in:file">
  <Header>
  <Name>DEF</Name>
  <no>1235</no>
 <FileName>Invoice2</FileName>
</Header>
<Detail><Id>
<Type>2</Type>
<Customerno>3</Customerno>
 <Group>4</Group>
  </Id>
  </Detail>
 </ns0:Test>

在上面的文件中,我们有 2 个 xml 命名空间,但在输出中它应该是一个 xml 命名空间,并且节点应该在该命名空间下。以下是预期的输出。

<?xml version="1.0" encoding="UTF-8"?>
 <ns0:Test xmlns:ns0="urn:demo:in:file">
<Header>
 <Name>ABC</Name>
 <no>1234</no>
 <FileName>Invoice</FileName>
</Header>
 <Detail>
  <Id>
 <Type>1</Type>
 <Customerno>2</Customerno>
    <Group>3</Group>
      </Id>
  </Detail>
  <Header>
 <Name>DEF</Name>
   <no>1235</no>
  <FileName>Invoice2</FileName>
  </Header>
    <Detail>
     <Id>
     <Type>2</Type>
     <Customerno>3</Customerno>
      <Group>4</Group>
      </Id>
    </Detail>
 </ns0:Test>

请帮助我实现预期的输出。

问候, 贾纳尔丹

【问题讨论】:

您的输入不是格式良好的 XML,XSLT 无法处理。 也许你正在搜索这个:exclude-result-prefixes="#all" 我想去掉xml命名空间的前缀。 【参考方案1】:

您的问题不(仅)与命名空间有关。您似乎正在尝试连接 XML 文档。不过……

    处理指令只允许在文档的开头,不能在中间。因此,附加以该行开头的内容已经很糟糕了。 XML 需要每个文档有一个***元素。如果您在该***元素之后附加某些内容,则再次出现问题。

所以你需要做的是引入一个新的***元素,然后将所有文档的***元素作为子元素添加到新的***元素。只有这样你才能想到命名空间并尝试使输出更有效率。

【讨论】:

以上是关于从 XML 中删除多个 XML 命名空间的主要内容,如果未能解决你的问题,请参考以下文章

如何从杰克逊 XML 解析中删除命名空间定义

如何从 XML 元素中删除一个特定的命名空间

如何从输出 xml 中删除命名空间?

xml 从元素中删除命名空间

从.NET中生成的XML中删除命名空间[重复]

使用 PHP 从 XML 中删除命名空间