Как использовать LINQ для чтения XML, содержащего включенные файлы?

В настоящее время я использую VS2008, C# 3.5 и LINQ для чтения файла XML. (назовите это A.xml) Я хочу включить другие файлы XML в A.xml с помощью xinclude. Мои первые попытки не увенчались успехом, и я не нашел никакой существующей информации о том, как эти два работают вместе.

Я создаю корневой элемент моего запроса, вызывая XElement.Load(). Есть ли другой способ создания корневого элемента, который будет обрабатывать оператор include?

Пример:
Файл A.xml

<A>  
  <xi:include href="B.xml" xmlns:xi="http://www.w3.org/2003/XInclude"/>  
</A>

Файл B.xml

<B>  
  <TAG_B Name="foo">  
    <TAG_C attr="bar"/>
  </TAG_B>  
</B>

Код C#:

 XElement root = XElement.Load(@"A.xml");
 var b = from TAG_B in root.Descendants("B")
         let name = (string)TAG_B.Attribute("Name")
         where name.Equals("foo")
         select TAG_B;

Я надеялся, что XElement.Load включит содержимое B.xml и выдаст следующее:

<A> 
  <B>  
    <TAG_B Name="foo">  
      <TAG_C attr="bar"/>
    </TAG_B>  
  </B>
</A>

К сожалению, элемент include не обрабатывается, поэтому в перечисляемом элементе нет элементов TAG_B.

1 ответ

LINQ и.Net Framework не поддерживают XInclude. В SourceForge есть бесплатный проект, который реализует XInclude для.Net, но я не думаю, что он поддерживает LINQ.

Другие вопросы по тегам