2017-02-09 19 views
2

я должен быть в состоянии разобрать оба эти 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.

Это ошибка, или я делаю что-то неправильно?

+1

Атрибуты без явного префикса пространства имен будет не в пространстве имен. Пространство имен по умолчанию не действует, только для элементов. –

ответ

 Смежные вопросы

  • Нет связанных вопросов^_^