当前位置: 首页 > 编程语言 > C#

如何删除XDocumentShare中非root节点的xmlns属性

时间:2023-04-11 00:16:18 C#

如何删除XDocument中非root节点的xmlns属性情况我正在使用XDocument尝试删除第一个内部节点的xmlns属性xmlns=""属性:所以我想要的结果是:代码doc=XDocument.Load(XmlReader.Create(inStream));XElementinner=doc.XPathSelectElement("/*/*[1]");if(inner!=null){inner.Attribute("xmlns").Remove();}MemoryStreamoutStream=newMemoryStream();XmlWriterwriter=XmlWriter.Create(outStream);doc.Save(作者);//<---Exceptionoccurshere问题在尝试保存文档时,出现以下异常:无法在同一起始元素标记内将前缀“”从“”重新定义为“http://my.namespace”。这到底是什么意思,我该怎么做才能删除那个讨厌的xmlns=""?笔记更新我尝试使用受此问题答案启发的代码:inner=newXElement(inner.Name.LocalName,inner.Elements());调试时,xmlns属性消失了,但我得到了同样的异常。我认为下面的代码就是您想要的。您需要将每个元素放入正确的名称空间并删除受影响元素上的所有xmlns=''属性。后一部分是必需的,否则LINQtoXML基本上会尝试为您留下一个元素这是代码:usingSystem;使用System.Xml.Linq;类测试{staticvoidMain(){XDocumentdoc=XDocument.Load("test.xml");//所有具有空命名空间的元素...foreach(varnodeindoc.Root.Descendants().Where(n=>n.Name.NamespaceName=="")){//删除xmlns=''属性.注意使用//Attributes而不是Attribute,以防//attribute不存在(如果我们“手动”创建文档而不是从文件中加载//它可能不存在。)节点.Attributes("xmlns").Remove();//继承父命名空间node.Name=node.Parent.Name.Namespace+node.Name.LocalName;}Console.WriteLine(文档);//或doc.Save(...)}}无需“删除”空的xmlns属性。添加一个空的xmlnsattrib的全部原因是因为您的子节点有一个空的名称空间(="),因此与您的根节点不同。向您的子节点添加相同的名称空间也将解决此"副作用"。以上就是C#学习教程:如何删除XDocument中除root以外的节点的xmlns属性共享的所有内容。如果对大家有用,需要详细了解C#学习教程,希望大家多多关注——XNamespacexmlns=XNamespace.Get("http://my.namespace");//错误vardoc=newXElement(xmlns+"Root",newXElement("Firstelement"));//给出://正确vardoc=newXElement(xmlns+"Root",newXElement(xmlns+"Firstelement"));//给出:本文摘自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: