2

我必须能够解析这两个 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>(via 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"

这里 theXElement认为它有一个命名空间,而XAttributes 认为它​​们没有任何命名空间。
所以XAttributes 不知何故不知道兄弟xmlnsxml 命名空间声明属性。

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

4

1 回答 1

0

事实证明这不是一个错误,所描述的行为符合 xml 规范。

请参阅:
未限定属性名称的 XML 默认命名空间?
将命名空间应用于元素和属性

于 2017-02-10T12:50:10.900 回答