首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何防止.NET的XmlDocument输出中出现空白的xmlns属性?

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

Stack Overflow用户
提问于 2008-09-25 18:16:38
回答 7查看 75K关注 0票数 125

在.NET中从XmlDocument生成XML时,第一次插入没有关联名称空间的元素时,会出现一个空白的xmlns属性;如何防止这种情况发生?

示例:

代码语言:javascript
复制
XmlDocument xml = new XmlDocument();
xml.AppendChild(xml.CreateElement("root",
    "whatever:name-space-1.0"));
xml.DocumentElement.AppendChild(xml.CreateElement("loner"));
Console.WriteLine(xml.OuterXml);

输出:

代码语言:javascript
复制
<root xmlns="whatever:name-space-1.0"><loner xmlns="" /></root>

所需输出:

代码语言:javascript
复制
<root xmlns="whatever:name-space-1.0"><loner /></root>

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

我这样做的理由是看看是否可以使用XmlDocument生成的XML匹配特定协议的标准XML。空白的xmlns属性可能不会破坏或混淆解析器,但在我所见过的该协议的任何用法中也不存在该属性。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2008-09-25 20:49:13

多亏了Jeremy Lew的回答和更多的实践,我知道了如何删除空白的xmlns属性:在创建任何您不想在其上添加前缀的子节点时,传入根节点的名称空间。在根上使用没有前缀的名称空间意味着您需要对子元素使用相同的名称空间,以便它们也没有前缀。

已修复代码:

代码语言:javascript
复制
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);

感谢大家的回答,让我找到了正确的方向!

票数 116
EN

Stack Overflow用户

发布于 2011-12-30 12:02:18

这是JeniT答案的一个变体(顺便说一句,非常非常感谢!)

代码语言:javascript
复制
XmlElement new_element = doc.CreateElement("Foo", doc.DocumentElement.NamespaceURI);

这样就不必在任何地方复制或重复名称空间。

票数 96
EN

Stack Overflow用户

发布于 2008-09-25 18:23:03

如果示例XML中的<loner>元素没有xmlns默认名称空间声明,那么它应该在whatever:name-space-1.0名称空间中,而不是不在名称空间中。如果这是您想要的,则需要在该名称空间中创建元素:

代码语言:javascript
复制
xml.CreateElement("loner", "whatever:name-space-1.0")

如果希望<loner>元素不在名称空间中,那么生成的XML就是您所需要的,并且不必担心自动为您添加的xmlns属性。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/135000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档