Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.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# 从xml中删除xmlns属性_C#_Xml_C# 4.0_Xmldocument_Xmlnode - Fatal编程技术网

C# 从xml中删除xmlns属性

C# 从xml中删除xmlns属性,c#,xml,c#-4.0,xmldocument,xmlnode,C#,Xml,C# 4.0,Xmldocument,Xmlnode,在下面的xml中,我试图删除xmlns属性,但无法在下填充, 属性仍然显示在outerxml和final xmldocument下 ... <z:Datac knid="2" xmlns="http://services/api/"></z:Datac> ... <z:Datac knid="3" xmlns="http://services/api/"></z:Datac> .... <z:Datac knid="5" xmlns="ht

在下面的xml中,我试图删除xmlns属性,但无法在下填充, 属性仍然显示在outerxml和final xmldocument下

... 
<z:Datac knid="2" xmlns="http://services/api/"></z:Datac>
...
<z:Datac knid="3" xmlns="http://services/api/"></z:Datac>
....
<z:Datac knid="5" xmlns="http://services/api/"></z:Datac>
....
没有xml.linq

我想您可能需要如下内容:

XmlDocument doc=新的XmlDocument();
doc.Load(“my.xml”);
foreach(doc.DocumentElement.ChildNodes中的变量节点)
{
var el=作为XmlElement的节点;
如果(el!=null)
{
if(el.HasAttribute(“xmlns”))
{
var ns=el.GetAttribute(“xmlns”);
如果(ns!=null&&ns!=el.NamespaceURI)
{
删除属性(“xmlns”);
}
}
}
}
doc.Save(“new.xml”);

显然,在复杂的场景中,您可能希望进行查询,或者发出一个“所有元素”查询。

您尝试了什么?您是否绑定到
XmlDocument
?在
XDocument
中,
el.Attribute(“xmlns”)?.Remove()似乎有效。。。(显然,在实际代码中,您希望根据元素的.Name.Namespace测试xmlns,并且仅在不同的情况下删除)没有,linq.xml。上面的链接与linq.xml中的xElement一起使用。。这里没有,是的,我要把那个接近复制,;这是一个完全不同且不兼容的API,您从何处获取此XML?看起来很可疑,;冒号用于将XML名称空间与标记分开,而
xmlns
属性用于区分名称空间。但是在XML片段中,这些都是错误的,
z
名称空间从来没有定义过,
xmlns
属性没有定义名称空间。此XML不使用名称空间,已严重损坏,或者您没有向我们显示实际的XML。问题是,`if(el.HasAttribute(“xmlns”)`不为真,但是,el.OuterXml具有xmlns且名称空间URI存在。@dsi我测试过它。。。它在这里工作得很好;如果您看到它在特定场景中失败,那么使用具有代表性的代码和xml发布确切的场景会有所帮助;如果您说它不适用于document/root元素,那么很好:修复它!
foreach (var item in nodes)
                    {
                        var xmlnsAttribute = (item.Attributes has "xmlns" attribute)
                        if (xmlnsAttribute != null)
                        {
                            Remove xmlNode...  //not able to reach here as not able to find xmlns.
                        }
}