Possiamo importare file XML in un altro file XML?

Possiamo importare un file XML in un altro file XML?

Voglio dire c’è un tag di importazione in XML che accetta il percorso XML come parametro e importa XML (per il quale viene fornito il percorso).

Potresti usare un’ quadro generale esterna (analizzata) .

Dichiari l’ quadro in questo modo:

 

Quindi fai riferimento in questo modo:

 &otherFile; 

Un esempio completo:

   ]>   &otherFile;   

Quando il parser XML legge il file, espanderà il riferimento all’ quadro e includerà il file XML di riferimento come parte del contenuto.

Se “otherFile.xml” contiene: this is my content

Quindi l’XML sarebbe valutato e “visto” da un parser XML come:

    this is my content   

Alcuni riferimenti che potrebbero essere utili:

Le altre risposte riguardano i 2 approcci più comuni, Xinclude e XML entity framework esterne. Microsoft ha una bellissima recensione sul perché si dovrebbe preferire Xinclude, oltre a diverse implementazioni di esempio. Ho citato il confronto qui sotto:

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

Perché XInclude?

La prima domanda che si potrebbe porre è “Perché utilizzare XInclude al posto di quadro esterne XML?” La risposta è che le quadro esterne XML hanno un numero di limiti noti e implicazioni sconvenienti, che impediscono loro di essere una funzione di inclusione generale. In particolare:

  • Un’ quadro esterna XML non può essere un documento XML indipendente in piena regola, né la dichiarazione XML autonoma né la dichiarazione Doctype sono consentite. Ciò significa in effetti che un’ quadro esterna XML stessa non può includere altre quadro esterne.
  • Un’entity framework esterna XML deve essere XML ben formato (non così male a prima vista, ma immagina di voler includere un codice C # di esempio nel tuo documento XML).
  • Il mancato caricamento di un’ quadro esterna è un errore fatale; qualsiasi recupero è severamente vietato.
  • Solo l’intera quadro esterna può essere inclusa, non c’è modo di includere solo una parte di un documento. -Le quadro esterne devono essere dichiarate in un DTD o in un sottoinsieme interno. Questo apre un jar di Pandora pieno di implicazioni, come il fatto che l’elemento del documento deve essere nominato nella dichiarazione Doctype e che i lettori di validazione possono richiedere che l’intero modello di contenuto del documento sia definito in DTD, tra gli altri.

Le carenze dell’utilizzo di quadro esterne XML come meccanismo di inclusione sono note da tempo e in effetti hanno generato la presentazione della proposta di inclusione XML al W3C nel 1999 da parte di Microsoft e IBM. La proposta ha definito un modello di elaborazione e una syntax per una funzione di inclusione XML generica.

Quattro anni più tardi, la versione 1.0 di XML Inclusions, conosciuta anche come Xinclude, è una Candidate Recommendation, il che significa che il W3C crede che sia stato ampiamente rivisto e soddisfi i problemi tecnici di base che ha deciso di risolvere, ma non è ancora un raccomandazione completa

Un altro buon sito che fornisce una varietà di implementazioni di esempio è https://www.xml.com/pub/a/2002/07/31/xinclude.html . Di seguito è riportato un esempio di caso di uso comune dal loro sito:

  The Wit and Wisdom of George W. Bush     

Questa funzionalità è chiamata XML Inclusions (XInclude) . Qualche esempio:

La soluzione di Mads Hansen è buona, ma per riuscire a leggere il file esterno in .NET 4 è stato necessario del tempo per capire come utilizzare i suggerimenti nei commenti sui resolver, ProhibitDTD e così via.

Questo è come è fatto:

  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; } 

logfile.xml:

   ]>  &events;  

events.txt:

  item1 item2