如何为 XDocument 指定 xmlns?
Posted
技术标签:
【中文标题】如何为 XDocument 指定 xmlns?【英文标题】:How to specify an xmlns for XDocument? 【发布时间】:2013-02-12 19:59:50 【问题描述】:我试过了:
textBox1.Text = new XDocument(new XDeclaration("1.0", "UTF-8", "yes"),
new XElement("root1", new XAttribute( "xmlns", @"http://example.com"), new XElement("a", "b"))
).ToString();
但我明白了:
The prefix '' cannot be redefined from '' to 'http://example.com' within the same start element tag.
我也尝试过替换(根据我找到的答案):
XAttribute(XNamespace.Xmlns,...
但也出现了错误。
注意:我不想在文档中包含多个 xmlns。
【问题讨论】:
也许这对你有用:***.com/a/2874572/1373170 【参考方案1】:XDocument
API 使用命名空间范围名称的方式是 XName
实例。只要您接受 XML 名称不仅仅是一个字符串,而是一个作用域标识符,它们就很容易使用。这是我的做法:
var ns = XNamespace.Get("http://example.com");
var doc = new XDocument(new XDeclaration("1.0", "utf-8", null));
var root = new XElement(ns + "root1", new XElement(ns + "a", "b"));
doc.Add(root);
结果:
<root1 xmlns="http://example.com">
<a>b</a>
</root1>
请注意,+
运算符被重载以接受 XNamespace
和 String
以生成 XName
实例。
【讨论】:
谢谢。似乎很奇怪,不会有一种简单的方法来只添加一次命名空间。 嗯,我认为这相当简单,而且它确实让您明白您所做的是创建命名空间名称,而不仅仅是字符串。如果你想要更少的命名空间代码,System.Xml.XmlDocument
类使用命名空间管理器来跟踪根命名空间,一旦你设置正确,你可以假装它不存在。
查看我的下一个问题:***.com/questions/14841517/… - 我也在尝试XmlDocument
,但没有帮助。
@Sam - 如果所有子元素都具有相同的命名空间,那么当您将 XML 文档转换为字符串时,输出机制可以选择省略子元素上的命名空间声明。因此,如果您在子元素上看到 xmlns
,请检查您的输出方式。此外,元素上命名空间属性的存在不应影响 XML 文档的实际含义。
是的,经过一番折腾,我设法添加了命名空间,使输出机制按我想要的方式工作。以上是关于如何为 XDocument 指定 xmlns?的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法将默认命名空间设置为从 XDocument 查询?
使用 C# 和 XDocument/XElement 解析 Soap 响应