繁体   English   中英

不是名称空间的C#XAttribute

[英]C# XAttribute that is not a namespace

我正在使用C#中的XDocument类编写XML文档。

尝试获取此输出:

<Details xmlns:p2="http://www.w3.org/2001/XMLSchema-instance" p2:type="SomeStuff"></Details>

这是我尝试过的方法,但是由于出现“:”而引发了异常。

XNamespace ns = "http://www.w3.org/2001/XMLSchema-instance";

...

new XElement("Details", new XAttribute(XNamespace.Xmlns + "p2", ns), new XAttribute("p2:type", "SomeStuff"),

实现所需输出的正确方法是什么?

您必须将"type"添加到实际的名称空间URI "http://www.w3.org/2001/XMLSchema-instance" ,而不是名称空间前缀 ,如下所示:

XNamespace ns = "http://www.w3.org/2001/XMLSchema-instance";

var element = new XElement("Details", new XAttribute(ns + "type", "SomeStuff"));

另外,您可以完全跳过为名称空间URI /前缀映射添加XAttribute ,只要在构造过程中正确设置了XElement.Name.NamespaceXAttribute.Name.NamespaceXmlWriter就会自动执行此操作。

这是使LINQ to XML比XmlDocument更简单的原因之一-您可以完全忽略前缀,并且仅使用真实的名称空间URI,这既简单又容易导致不依赖于名称空间选择的正确代码字首。 虽然如果出于装饰性原因确实要手动指定前缀,请参阅如何编写带有名称空间的xml和带有XElement的前缀? 表示正确的方法是:

var element = new XElement("Details", new XAttribute(XNamespace.Xmlns + "p2", ns), new XAttribute(ns + "type", "SomeStuff"));

结果是:

<Details xmlns:p2="http://www.w3.org/2001/XMLSchema-instance" p2:type="SomeStuff" />

样本.Net 在这里摆弄。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM