[英]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.Namespace
和XAttribute.Name.Namespace
, XmlWriter
就会自动执行此操作。
这是使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.