XAttribute не знает о родственном XAttribute, который IsNamespaceDeclaration

Я должен уметь разбирать оба этих xml-файла:

<!-- 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.

Это ошибка или я что-то не так делаю?


person nvirth    schedule 09.02.2017    source источник
comment
Атрибуты без явного префикса пространства имен не будут находиться в пространстве имен. Пространство имен по умолчанию не влияет, только на элементы.   -  person Jeff Mercado    schedule 10.02.2017


Ответы (1)


Оказывается, это не ошибка, описанное поведение соответствует спецификации xml.

См .:
Пространства имен XML по умолчанию для неквалифицированных имен атрибутов?
Применение пространств имен к элементам и атрибутам

person nvirth    schedule 10.02.2017