¿Podemos importar un archivo XML a otro archivo XML?
Quiero decir, ¿hay alguna etiqueta de importación en XML que tome la ruta XML como parámetro e importe XML (para la que se proporciona la ruta)?
Declaras la entidad así:
<!ENTITY otherFile SYSTEM "otherFile.xml">
Luego lo referencia de esta manera:
&otherFile;
Un ejemplo completo:
<?xml version="1.0" standalone="no" ?>
<!DOCTYPE doc [
<!ENTITY otherFile SYSTEM "otherFile.xml">
]>
<doc>
<foo>
<bar>&otherFile;</bar>
</foo>
</doc>
Cuando el analizador XML lee el archivo, expandirá la referencia de la entidad e incluirá el archivo XML referenciado como parte del contenido.
Si el "otherFile.xml" contenía: <baz>this is my content</baz>
Entonces el XML sería evaluado y "visto" por un analizador XML como:
<?xml version="1.0" standalone="no" ?>
<doc>
<foo>
<bar><baz>this is my content</baz></bar>
</foo>
</doc>
Algunas referencias que pueden resultar útiles:
XMLResolver
está configurada la propiedad. Si la propiedad XMLResolver no está establecida en su objeto XMLDocument, es posible que no cargue recursos externos. msdn.microsoft.com/en-us/library/5fcwybb2.aspxLas otras respuestas cubren los 2 enfoques más comunes, Xinclude y entidades externas XML. Microsoft tiene un artículo realmente bueno sobre por qué uno debería preferir Xinclude, así como varias implementaciones de ejemplo. He citado la siguiente comparación:
Según http://msdn.microsoft.com/en-us/library/aa302291.aspx
Otro buen sitio que proporciona una variedad de implementaciones de ejemplo es https://www.xml.com/pub/a/2002/07/31/xinclude.html . A continuación se muestra un ejemplo de caso de uso común de su sitio:
<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>
fuente
Esta característica se llama Inclusiones XML (XInclude) . Algunos ejemplos:
fuente
La solución de Mads Hansen es buena, pero para tener éxito en la lectura del archivo externo en .NET 4 tomó algo de tiempo averiguar el uso de sugerencias en los comentarios sobre resolutores, ProhibitDTD, etc.
Así es como se hace:
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>
fuente