Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果名称空间也定义为默认名称空间,则强制XDocument不使用名称空间前缀_C#_Xml_Namespaces_Linq To Xml - Fatal编程技术网

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

C# 如果名称空间也定义为默认名称空间,则强制XDocument不使用名称空间前缀,c#,xml,namespaces,linq-to-xml,C#,Xml,Namespaces,Linq To Xml,我有一个xml文件,其中指定了默认名称空间,有名称空间前缀也有名称空间前缀。当我生成xml输出时,所有xml元素都加上前缀。既然我使用默认名称空间,有没有办法去掉前缀 class Program { static void Main(string[] args) { var xml = "<root xmlns='default-namespace' xmlns:key='default-namespace'>" +

我有一个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();
    }
}
类程序
{
静态void Main(字符串[]参数)
{
var-xml=
"" +
"  " +
"  " +
"";
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文件是由另一方提供的,我需要做尽可能少的修改。

您可以使用String.Replace方法获取所需的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);
var xml=“”+
"  " +
"  " +
"";
var document=XDocument.Parse(xml);
var output=document.ToString().Replace(“键:”,string.Empty);

在我看来,LINQ to XML对象模型的一个缺点是没有存储节点名称的前缀,这样序列化程序在将树序列化为XML字符串时必须根据名称空间声明属性选择前缀。似乎ToString()或Save的当前实现使用了命名空间的最后一次找到的命名空间声明,因为将顺序更改为
会产生不同的结果,但这显然不值得依赖。如果前缀很重要,那么选择一个不同的树模型,比如XmlDocument。这被认为是一种黑客行为。如果节点1包含值键:something