XAttribute不知道兄弟XAttribute是哪个IsNamespaceDeclaration

时间:2017-02-09 16:38:28

标签: c# xml linq-to-xml xelement xattribute

我必须能够解析这两个xml-s:

<!-- Case 1 -->
<root xmlns="http://www.xml.namespace/111111">
    <dataObject id="Id1" name="Name1" xmlns="http://www.xml.namespace/222222" />
</root>

<!-- Case 2 -->
<root xmlns:myNs="http://www.xml.namespace/222222">
    <myNs:dataObject myNs:id="Id1" myNs:name="Name1" />
</root>

我必须将<dataObject>(通过XmlSerializer)解析为C#模型类,其中包含:

[XmlAttribute(AttributeName = "id", Namespace="http://www.xml.namespace/222222")]
public string Id { get; set; }

但它仅适用于Case 2,不适用于Case 1
所以我用这段代码检查了Case 1

var xmlString = @"<dataObject id=""Id1"" name=""Name1"" xmlns=""http://www.xml.namespace/222222"" />";
var xElement = XElement.Parse(xmlString);
var idAttribute = xElement.FirstAttribute;
Console.WriteLine(idAttribute.Name.Namespace); // ""
Console.WriteLine(xElement.Name.Namespace); // "http://www.xml.namespace/222222"

这里XElement认为它有一个名称空间,而XAttribute认为它们没有名称空间。
所以XAttribute以某种方式不知道兄弟xmlns xml名称空间声明属性。

这是一个错误,还是我做错了什么?

1 个答案:

答案 0 :(得分:0)

它发现它不是一个bug,所描述的行为符合xml规范。

见:
XML Default namespaces for unqualified attribute names?
Applying Namespaces to Elements and Attributes