я должен быть в состоянии разобрать оба эти XML-s:XAttribute не знает родного брата XAttribute который IsNamespaceDeclaration
<!-- 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
s думают, что они не имеют никаких.
Таким образом, XAttribute
s как-то не знают об атрибуте объявления пространства имен sibling xmlns
.
Это ошибка, или я делаю что-то неправильно?
Атрибуты без явного префикса пространства имен будет не в пространстве имен. Пространство имен по умолчанию не действует, только для элементов. –