一尘不染

如何防止从.NET的XmlDocument输出的空白xmlns属性?

c#

从.NET中的XmlDocument生成XML时,xmlns第一次插入 没有 关联名称空间的元素时,将出现空白属性;如何预防呢?

例:

XmlDocument xml = new XmlDocument();
xml.AppendChild(xml.CreateElement("root",
    "whatever:name-space-1.0"));
xml.DocumentElement.AppendChild(xml.CreateElement("loner"));
Console.WriteLine(xml.OuterXml);

输出:

<root xmlns="whatever:name-space-1.0"><loner xmlns="" /></root>

所需 输出:

<root xmlns="whatever:name-space-1.0"><loner /></root>

是否有适用于XmlDocument代码的解决方案,不是将文档转换为字符串 发生的事情OuterXml

我这样做的理由是看我是否可以使用XmlDocument生成的XML匹配特定协议的标准XML。blank xmlns属性 可能
不会破坏或混淆解析器,但在我对该协议的任何使用中也都没有出现。


阅读 292

收藏
2020-05-19

共1个答案

一尘不染

多亏Jeremy Lew的回答和更多的尝试,我才弄清楚了如何删除空白xmlns属性:在创建任何
希望有前缀的子节点时,传入根节点的名称空间。在根目录使用没有前缀的名称空间意味着您需要在子元素上使用相同的名称空间,以便它们 没有前缀。

固定代码:

XmlDocument xml = new XmlDocument();
xml.AppendChild(xml.CreateElement("root", "whatever:name-space-1.0"));
xml.DocumentElement.AppendChild(xml.CreateElement("loner", "whatever:name-space-1.0")); 
Console.WriteLine(xml.OuterXml);

感谢大家对您的所有回答,这些回答使我朝着正确的方向前进!

2020-05-19