Как использовать 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.