В настоящее время я использую VS2008, С# 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>
Код С#:
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.
LINQ и .Net framework не поддерживают XInclude. Существует бесплатный проект SourceForge, который реализует XInclude для .Net, но я не думаю, что он поддерживает LINQ.