Czy możemy zaimportować plik XML do innego pliku XML?
Mam na myśli, czy istnieje jakiś znacznik importu w XML, który przyjmuje ścieżkę XML jako parametr i importuje XML (dla którego ścieżka jest podana).
Deklarujesz jednostkę w ten sposób:
<!ENTITY otherFile SYSTEM "otherFile.xml">
Następnie odwołujesz się do tego w ten sposób:
&otherFile;
Kompletny przykład:
<?xml version="1.0" standalone="no" ?>
<!DOCTYPE doc [
<!ENTITY otherFile SYSTEM "otherFile.xml">
]>
<doc>
<foo>
<bar>&otherFile;</bar>
</foo>
</doc>
Gdy parser XML odczytuje plik, rozszerzy odwołanie do encji i włączy plik XML, do którego się odwołuje, jako część zawartości.
Jeśli plik „otherFile.xml” zawierał: <baz>this is my content</baz>
Następnie XML byłby oceniany i „widziany” przez parser XML jako:
<?xml version="1.0" standalone="no" ?>
<doc>
<foo>
<bar><baz>this is my content</baz></bar>
</foo>
</doc>
Kilka referencji, które mogą być pomocne:
XMLResolver
właściwość jest ustawiona. Jeśli właściwość XMLResolver nie jest ustawiona w obiekcie XMLDocument, może nie ładować zasobów zewnętrznych. msdn.microsoft.com/en-us/library/5fcwybb2.aspxPozostałe odpowiedzi dotyczą 2 najczęściej stosowanych podejść, Xinclude i XML jednostek zewnętrznych. Microsoft ma naprawdę świetny opis, dlaczego należy preferować Xinclude, a także kilka przykładowych implementacji. Poniżej przytoczyłem porównanie:
Na http://msdn.microsoft.com/en-us/library/aa302291.aspx
Inną dobrą witryną, która zawiera różne przykładowe implementacje, jest https://www.xml.com/pub/a/2002/07/31/xinclude.html . Poniżej znajduje się przykład typowego przypadku użycia z ich witryny:
<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>
źródło
Ta funkcja nazywa się dołączeniami XML (XInclude) . Kilka przykładów:
źródło
Rozwiązanie Madsa Hansena jest dobre, ale pomyślne odczytanie zewnętrznego pliku w .NET 4 zajęło trochę czasu, aby dowiedzieć się, korzystając ze wskazówek w komentarzach na temat resolverów, ProhibitDTD i tak dalej.
Oto jak to się robi:
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>
źródło