Podemos importar um arquivo XML para outro arquivo XML?
Quero dizer, existe alguma tag de importação em XML que leva o caminho XML como parâmetro e importa XML (para o qual o caminho é fornecido).
Você declara a entidade assim:
<!ENTITY otherFile SYSTEM "otherFile.xml">
Então você o referencia assim:
&otherFile;
Um exemplo completo:
<?xml version="1.0" standalone="no" ?>
<!DOCTYPE doc [
<!ENTITY otherFile SYSTEM "otherFile.xml">
]>
<doc>
<foo>
<bar>&otherFile;</bar>
</foo>
</doc>
Quando o analisador XML lê o arquivo, ele expande a referência da entidade e inclui o arquivo XML referenciado como parte do conteúdo.
Se o "otherFile.xml" continha: <baz>this is my content</baz>
Então o XML seria avaliado e "visto" por um analisador XML como:
<?xml version="1.0" standalone="no" ?>
<doc>
<foo>
<bar><baz>this is my content</baz></bar>
</foo>
</doc>
Algumas referências que podem ser úteis:
XMLResolver
propriedade está definida. Se a propriedade XMLResolver não estiver configurada em seu objeto XMLDocument, ele pode não carregar recursos externos. msdn.microsoft.com/en-us/library/5fcwybb2.aspxAs outras respostas cobrem as 2 abordagens mais comuns, entidades externas Xinclude e XML. A Microsoft tem um ótimo artigo sobre porque alguém deve preferir o Xinclude, bem como vários exemplos de implementações. Citei a comparação abaixo:
Por http://msdn.microsoft.com/en-us/library/aa302291.aspx
Outro bom site que fornece uma variedade de exemplos de implementação é https://www.xml.com/pub/a/2002/07/31/xinclude.html . Abaixo está um exemplo de caso de uso comum de seu site:
<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>
fonte
Este recurso é denominado Inclusões XML (XInclude) . Alguns exemplos:
fonte
A solução de Mads Hansen é boa, mas para ter sucesso na leitura do arquivo externo no .NET 4 levou algum tempo para descobrir usando dicas nos comentários sobre resolvers, ProhibitDTD e assim por diante.
Assim que se faz:
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>
fonte