Csharp/C#教程:ImportNode创建空xmlns属性分享


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

(0)
上一篇 2021年12月24日
下一篇 2021年12月24日

精彩推荐