Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不是命名空间的C#XAttribute_C#_Xml - Fatal编程技术网

不是命名空间的C#XAttribute

不是命名空间的C#XAttribute,c#,xml,C#,Xml,我正在使用C#中的XDocument类编写一个XML文档 正在尝试获取此输出: <Details xmlns:p2="http://www.w3.org/2001/XMLSchema-instance" p2:type="SomeStuff"></Details> 实现所需输出的正确方法是什么?您必须将“type”添加到实际的命名空间URI中,”http://www.w3.org/2001/XMLSchema-instance“,而不是命名空间前缀,如下所示: XNa

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

正在尝试获取此输出:

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

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

您必须将
“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
XmlWriter
将自动执行此操作,只要在构造过程中正确设置了
XElement.Name.namespace
XAttribute.Name.namespace

这是使LINQ to XML比
XmlDocument
更简单的原因之一——您可以完全忽略前缀,只使用真正的名称空间URI,这既简单又更可能生成不依赖于名称空间前缀选择的正确代码。但是,如果出于外观原因确实要手动指定前缀,请参见以下哪种方法指示正确的方法:

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 fiddle示例。

您必须将
“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
XmlWriter
将自动执行此操作,只要在构造过程中正确设置了
XElement.Name.namespace
XAttribute.Name.namespace

这是使LINQ to XML比
XmlDocument
更简单的原因之一——您可以完全忽略前缀,只使用真正的名称空间URI,这既简单又更可能生成不依赖于名称空间前缀选择的正确代码。但是,如果出于外观原因确实要手动指定前缀,请参见以下哪种方法指示正确的方法:

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 fiddle示例。

这似乎产生了w3.org/2001/XMLSchema实例“>无论如何,接收应用程序已经正确地解释了数据。@Quantum_内核-在这种情况下,可能有一个
xmlns:p2=“。。。“
在更高级别的范围内。自动分配名称空间时,
XmlWriter
将添加新前缀,而不是在范围中重新定义前缀。无论如何,接收应用程序已正确解释数据。-很好,那么它的实现是正确的,并根据XML元素的实际名称空间URI解析XML元素。From:应用程序应避免对前缀的选择附加任何意义。这似乎产生了w3.org/2001/XMLSchema实例“>接收应用程序已正确解释了数据。@Quantum_Kernel-在这种情况下,可能存在
xmlns:p2=“。。。“
在更高级别的范围内。自动分配名称空间时,
XmlWriter
将添加新前缀,而不是在范围中重新定义前缀。无论如何,接收应用程序已正确解释数据。-很好,那么它的实现是正确的,并根据XML元素的实际名称空间URI解析XML元素。From:应用程序应避免对前缀的选择附加任何意义。