ImportNode创建空xmlns属性
重新代码:
var tmpNewNode = xdoc.ImportNode(newNode, true); if (oldNode.ParentNode != null) { oldNode.ParentNode.ReplaceChild(tmpNewNode, oldNode); return true; }
使用空xmlns属性(xmlns =“”)创建tmpNewNode。 有什么建议我怎么能避免呢?
10倍
这里可能发生的是newNode来自没有声明名称空间的文档,但oldNode位于带有名称空间的文档中。 在这种情况下,节点将其空白名称空间转移到新文档,并显式显示。 说实话,如果它只是字符串比较的问题,那么在使用它之前从XML字符串中删除xmlns =“”的所有实例都不会有什么坏处。
按照MarkXA的说法 :
这里可能发生的是newNode来自没有声明名称空间的文档,但oldNode位于带有名称空间的文档中。 在这种情况下,节点将其空白名称空间转移到新文档,并显式显示。
您可以操作String以进行比较,但DOM中的节点不能正确命名空间,如果您尝试使用它可能会导致以后出现问题。
正确的解决方案是首先使用适当的命名空间限定来构建newNode。 通过命名空间限定,我指的是导入DOM中使用的命名空间。
当我像这里创建一个XmlElement时,我遇到了同样的问题
XmlElement xmlElement = myXmlDocument.CreateElement("MyElemenent"); myXmlDocument.AppendChild(xmlElement);
在此之后,我在保存后获得了属性xmlns =“”。
如果我使用文档的命名空间,我可以抑制此xmlns属性。
XmlElement xmlElement = myXmlDocument.CreateElement("MyElemenent",myXmlDocument.DocumentElement.NamespaceURI); myXmlDocument.AppendChild(xmlElement);
没有空的xmlns =“”我的SelectNodes不再工作,因为需要指定命名空间。 此处的解决方案(使用-xpath-with-default-namespace)
尝试:
oldNode.InnerXml = tmpNewNode.InnerXml
最后,我解决了这个打开的xml文件,并用空字符串替换xmlns“”的所有发生。
也许它不是优雅的解决方案,但它简单,工作正常。
//remove void xmlns File.WriteAllText(filename, Regex.Replace(File.ReadAllText(filename), "xmlns=""", ""));
将默认命名空间添加到xdoc
上述就是C#学习教程:ImportNode创建空xmlns属性分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/990276.html