4 ответов:
вы могли бы использовать внешний (разбираемый) общий объект.
вы объявляете сущность следующим образом:
<!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>несколько ссылок, которые могут быть полезны:
другие ответы охватывают 2 наиболее распространенных подхода, Xinclude и XML-внешние сущности. У Microsoft есть действительно отличная запись о том, почему следует предпочесть Xinclude, а также несколько примеров реализации. Я процитировал сравнение ниже:
за http://msdn.microsoft.com/en-us/library/aa302291.aspx
Почему XInclude?
первый вопрос, который можно задать: "Зачем использовать XInclude вместо XML внешние сущности?" Этот ответ заключается в том, что внешние сущности XML есть ряд известных ограничений и неудобных последствий, которые эффективно предотвращать их от включения общего назначения объект. В частности:
- внешняя сущность XML не может быть полномасштабным независимым XML-документом-ни автономное объявление XML, ни объявление Doctype не являются допустимый. Это фактически означает, что сама внешняя сущность XML не может включите другие внешние объекты.
- внешняя сущность XML должна быть хорошо сформирована XML (не так уж плохо на первый взгляд, но представьте, что вы хотите включить образец кода C# в свой XML документ.)
- невозможность загрузки внешнего объекта является фатальной ошибкой; любое восстановление строго запрещено.
- может быть включен только весь внешний объект, невозможно включить только часть документа. - Внешние сущности должны быть объявлены в DTD или внутреннем подмножестве. Это открывает ящик Пандоры, полный последствия, такие как тот факт, что элемент документа должен быть назван в объявлении 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>
эта функция называется XML-включения (XInclude). Некоторые примеры:
решение Мадса Хансена хорошо, но для успешного чтения внешнего файла в .NET 4 потребовалось некоторое время, чтобы выяснить, используя подсказки в комментариях о решателях, ProhibitDTD и так далее.
вот как это делается:
XmlReaderSettings settings = new XmlReaderSettings(); settings.DtdProcessing = DtdProcessing.Parse; XmlUrlResolver resolver = new XmlUrlResolver(); resolver.Credentials = System.Net.CredentialCache.DefaultCredentials; settings.XmlResolver = resolver; var reader = XmlReader.Create("logfile.xml", settings); XmlDocument doc = new XmlDocument(); doc.Load(reader); foreach (XmlElement element in doc.SelectNodes("//event")) { var ch = element.ChildNodes; var count = ch.Count; }журнал.XML-код:
<?xml version="1.0"?> <!DOCTYPE logfile [ <!ENTITY events SYSTEM "events.txt"> ]> <logfile> &events; </logfile>событий.txt:
<event> <item1>item1</item1> <item2>item2</item2> </event>
Comments