Можем ли мы импортировать XML файл в другой файл XML?

Можно ли импортировать XML файл в другой файл XML?

Я имею в виду, есть ли какой-либо импортный тег в XML, который принимает XML-путь в качестве параметра и импортирует XML (для которого указан путь).

Ответ 1

Вы можете использовать внешний (проанализированный) общий объект.

Вы объявляете объект следующим образом:

<!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>

Несколько ссылок, которые могут быть полезны:

Ответ 3

Другие ответы охватывают два наиболее распространенных подхода: Xinclude и внешние XML-объекты. У Microsoft действительно отличная запись о том, почему следует предпочитать Xinclude, а также несколько примеров реализации. Я привел сравнение ниже:

Per http://msdn.microsoft.com/en-us/library/aa302291.aspx

Почему XInclude?

Первый вопрос, который можно задать, - "Зачем использовать XInclude вместо XML внешние сущности?". Ответ заключается в том, что внешние XML-объекты имеют количество известных ограничений и неудобных последствий, которые эффективно предотвращать их включение в общие назначения объект. В частности:

  • Внешний XML-объект не может быть полномасштабным независимым XML-документом - ни автономное объявление XML, ни объявление Doctype позволил. Это фактически означает, что сам внешний XML-объект не может включают другие внешние объекты.
  • Внешний XML-объект должен быть хорошо сформирован XML (не так уж плохо с первого взгляда, но представьте, что вы хотите включить образец кода С# в свой XML файл документ).
  • Несоблюдение внешней сущности является фатальной ошибкой; любое восстановление строго запрещено.
  • Может быть включен только весь внешний объект, нет способа включить только часть документа. -Внутренние объекты должны быть объявлены в DTD или внутреннем подмножестве. Это открывает коробку Pandora, полную последствий, например, тот факт, что элемент документа должен быть назван в объявлении Doctype и что для проверки читателей может потребоваться, чтобы полная модель контента документ будет определен в DTD среди других.

Недостатки использования внешних объектов XML в качестве включения механизм известен в течение некоторого времени и фактически породил представление Предложения о включении XML в W3C в 1999 году Microsoft и IBM. В предложении определена модель обработки и синтаксис для универсального объекта интеграции XML.

Спустя четыре года версия 1.0 вложений XML, также известная как Xinclude, является рекомендацией кандидата, что означает, что W3C считает, что он был широко рассмотрен и удовлетворяет основные технические проблемы, которые он решил решить, но еще не рекомендация.

Другим хорошим сайтом, который предоставляет множество реализаций примеров, является 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>