Peut-on importer un fichier XML dans un autre fichier XML?

Peut-on importer un fichier XML dans un autre fichier XML?

Je veux dire, existe-t-il une balise d’importation en XML qui prend le chemin XML comme paramètre et importe le XML (pour lequel le chemin est fourni).

Vous pouvez utiliser une entité générale externe (analysée) .

Vous déclarez l’entité comme ceci:

 

Ensuite, vous le référencez comme ceci:

 &otherFile; 

Un exemple complet:

   ]>   &otherFile;   

Lorsque l’parsingur XML lit le fichier, il développe la référence d’entité et inclut le fichier XML référencé dans le contenu.

Si le “otherFile.xml” contenait: this is my content

Ensuite, le XML serait évalué et “vu” par un parsingur XML en tant que:

    this is my content   

Quelques références qui pourraient être utiles:

Les autres réponses couvrent les 2 approches les plus courantes, Xinclude et les entités externes XML. Microsoft a vraiment écrit sur pourquoi il faut préférer Xinclude, ainsi que plusieurs exemples d’implémentations. J’ai cité la comparaison ci-dessous:

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

Pourquoi XInclude?

La première question que l’on peut se poser est la suivante: “Pourquoi utiliser XInclude au lieu d’entités externes XML?” La réponse est que les entités externes XML ont un certain nombre de limitations bien connues et d’implications gênantes, qui les empêchent effectivement d’être une facilité d’inclusion à usage général. Plus précisément:

  • Une entité externe XML ne peut pas être un document XML indépendant complet. Ni la déclaration XML autonome ni la déclaration Doctype ne sont autorisées. Cela signifie qu’une entité externe XML elle-même ne peut pas inclure d’autres entités externes.
  • Une entité externe XML doit être bien formée en XML (pas si mal à première vue, mais imaginez que vous souhaitiez inclure un exemple de code C # dans votre document XML).
  • Ne pas charger une entité externe est une erreur fatale. toute récupération est ssortingctement interdite.
  • Seule l’entité externe entière peut être incluse, il n’y a aucun moyen d’inclure uniquement une partie d’un document. -Les entités externes doivent être déclarées dans une DTD ou un sous-ensemble interne. Cela ouvre une boîte de Pandore pleine d’implications, comme le fait que l’élément de document doit être nommé dans la déclaration de Doctype et que la validation des lecteurs peut nécessiter que le modèle de contenu complet du document soit défini dans DTD, entre autres.

Les insuffisances de l’utilisation d’entités externes XML en tant que mécanisme d’inclusion sont connues depuis un certain temps et ont en fait engendré la soumission de la proposition d’inclusion XML au W3C en 1999 par Microsoft et IBM. La proposition définissait un modèle de traitement et une syntaxe pour une fonction d’inclusion XML à usage général.

Quatre ans plus tard, la version 1.0 des XML Inclusions, également connue sous le nom de Xinclude, est une recommandation candidate, ce qui signifie que le W3C estime qu’il a été largement revu et satisfait aux problèmes techniques de base qu’il se propose de résoudre. recommandation complète.

https://www.xml.com/pub/a/2002/07/31/xinclude.html est un autre bon site qui fournit une variété d’implémentations. Vous trouverez ci-dessous un exemple d’utilisation courant de leur site:

  The Wit and Wisdom of George W. Bush     

Cette fonctionnalité est appelée Inclusions XML (XInclude) . Quelques exemples:

La solution de Mads Hansen est bonne, mais pour réussir à lire le fichier externe dans .NET 4, il a fallu du temps pour trouver des indices dans les commentaires sur les résolveurs, ProhibitDTD, etc.

C’est comme ça que ça se passe:

  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