如果名称空间也被定义为默认,则强制XDocument不使用名称空间前缀

本文关键字:空间 XDocument 前缀 默认 定义 如果 | 更新日期: 2023-09-27 18:13:06

我有一个xml文件,其默认名称空间指定带有或不带有名称空间前缀。当我生成xml输出时,我得到所有xml元素的前缀。是否有办法摆脱前缀,因为我使用默认名称空间?

class Program
{
    static void Main(string[] args)
    {
        var xml =
            "<root xmlns='default-namespace' xmlns:key='default-namespace'>" +
            "  <node1></node1>" +
            "  <node2></node2>" +
            "</root>";
        var document = XDocument.Parse(xml);
        var output = document.ToString();
    }
}
输出:

<key:root xmlns="default-namespace" xmlns:key="default-namespace">
  <key:node1></key:node1>
  <key:node2></key:node2>
</key:root>

我的期望:

<root xmlns="default-namespace" xmlns:key="default-namespace">
  <node1></node1>
  <node2></node2>
</root>

不幸的是,我不能删除重复的命名空间声明。我使用的实际xml文件是由另一方提供的,我需要做尽可能少的修改。

如果名称空间也被定义为默认,则强制XDocument不使用名称空间前缀

您可以使用字符串。替换获取所需XML格式的方法…

var xml ="<root xmlns='default-namespace' xmlns:key='default-namespace'>" +
         "  <node1></node1>" +
         "  <node2></node2>" +
         "</root>";
        var document = XDocument.Parse(xml);
        var output = document.ToString().Replace("key:", string.Empty);