Можем ли мы импортировать XML-файл в другой XML-файл?
Я имею в виду, есть ли в XML какой-либо тег импорта, который принимает путь XML в качестве параметра и импортирует XML (для которого указан путь).
Вы объявляете объект следующим образом:
<!ENTITY otherFile SYSTEM "otherFile.xml">
Затем вы ссылаетесь на это так:
&otherFile;
Полный пример:
<?xml version="1.0" standalone="no" ?>
<!DOCTYPE doc [
<!ENTITY otherFile SYSTEM "otherFile.xml">
]>
<doc>
<foo>
<bar>&otherFile;</bar>
</foo>
</doc>
Когда синтаксический анализатор XML читает файл, он расширяет ссылку на объект и включает XML-файл, на который имеется ссылка, как часть содержимого.
Если "otherFile.xml" содержит: <baz>this is my content</baz>
Затем XML будет оцениваться и "рассматриваться" синтаксическим анализатором XML как:
<?xml version="1.0" standalone="no" ?>
<doc>
<foo>
<bar><baz>this is my content</baz></bar>
</foo>
</doc>
Несколько ссылок, которые могут быть полезны:
XMLResolver
свойство установлено. Если свойство XMLResolver не установлено для вашего объекта XMLDocument, он может не загружать внешние ресурсы. msdn.microsoft.com/en-us/library/5fcwybb2.aspxДругие ответы охватывают 2 наиболее распространенных подхода: внешние сущности Xinclude и XML. У Microsoft есть действительно отличная статья о том, почему следует предпочесть Xinclude, а также несколько примеров реализации. Я процитировал сравнение ниже:
На http://msdn.microsoft.com/en-us/library/aa302291.aspx
Еще один хороший сайт, который предоставляет множество примеров реализации, - это https://www.xml.com/pub/a/2002/07/31/xinclude.html . Ниже приведен типичный пример использования с их сайта:
<book xmlns:xi="http://www.w3.org/2001/XInclude"> <title>The Wit and Wisdom of George W. Bush</title> <xi:include href="malapropisms.xml"/> <xi:include href="mispronunciations.xml"/> <xi:include href="madeupwords.xml"/> </book>
источник
Эта функция называется включением XML (XInclude) . Несколько примеров:
источник
Решение Мэдса Хансена хорошее, но для успешного чтения внешнего файла в .NET 4 потребовалось некоторое время, чтобы выяснить, используя подсказки в комментариях о преобразователях, ProhibitDTD и так далее.
Вот как это делается:
logfile.xml:
<?xml version="1.0"?> <!DOCTYPE logfile [ <!ENTITY events SYSTEM "events.txt"> ]> <logfile> &events; </logfile>
events.txt:
<event> <item1>item1</item1> <item2>item2</item2> </event>
источник