Я должен уметь разбирать оба этих 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.
Это ошибка или я что-то не так делаю?