Как запросить xsi: type из атрибута, используя Linq to XML? - PullRequest
8 голосов
/ 28 января 2010

С учетом этого xml:

<?xml version="1.0" encoding="utf-8"?>
<EntityDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <components>
    <component xsi:type="TypeA">
      <Property1>100</Property1>
    </component>
    <component xsi:type="TypeB">
      <Property2>100</Property2>
    </component>
  </components>
</EntityDefinition>

Я хотел бы зациклить компоненты и создать экземпляр каждого объекта на основе атрибута xsi: type.

Вот код Linq to XML:

    IEnumerable<XElement> components =
    from c in elementsFromFile.Descendants("component")
    select (XElement)c;

    foreach (XElement e in components)
    {
        var type = e.Attributes("xsi:type");
    }

К сожалению, строка «var type = e.Attributes (« xsi: type »);» не работает, потому что двоеточия не допускаются в имени.

Есть идеи, как я могу запросить атрибут xsi: type у каждого элемента?

Спасибо,

Rick

1 Ответ

9 голосов
/ 28 января 2010

XNamespace ns = "http://www.w3.org/2001/XMLSchema-instance";

...

var type = e.Attributes (ns + "type");

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...