begin process at 2010 02 10 10:00:54
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C#

 > 

Archives

 > 

.NET

 > 

Création d'un document Xml à partir d'un autre


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Création d'un document Xml à partir d'un autre

samedi 4 mars 2006 à 14:46:11 | Création d'un document Xml à partir d'un autre

cfz

Bonjour,
j'ai un document Xml qui me sert de template pour en créer d'autres

j'ouvre le document template :

XmlDocument XmlTemplate = new XmlDocument();
XmlTemplate.Load(
"Template.xml");


Je créé un nouveau document Xml vide

XmlDocument XmlFinal = new XmlDocument();
XmlFinal.AppendChild(XmlFinal.CreateXmlDeclaration(
"1.0", null, null));
XmlNode XmlRoot = XmlFinal.CreateElement(
"Racine");


Je récupère les noeuds du document Xml pour les mettre dans mon document Xml final

foreach (XmlNode XmlNodeLoc in XmlTemplate.DocumentElement.ChildNodes)
{
      XmlRoot.AppendChild(XmlNodeLoc);   <--- ne marche pas...
ArgumentException was unhandled : The node to be inserted is from a different document context.

}


Que dois-je faire ?

samedi 4 mars 2006 à 14:51:20 | Re : Création d'un document Xml à partir d'un autre

coq

Administrateur CodeS-SourceS
Salut,

Et avec la méthode XmlNode.CloneNode ?



/*
coq
MVP Visual C#
*/
samedi 4 mars 2006 à 14:57:05 | Re : Création d'un document Xml à partir d'un autre

cfz

Même problème, même exception :'(

XmlRoot.AppendChild(XmlNodeLoc.CloneNode(true));

samedi 4 mars 2006 à 15:07:54 | Re : Création d'un document Xml à partir d'un autre

coq

Administrateur CodeS-SourceS
Ok.
Sert toi de InnerXml ou OuterXml alors.
Je ne sais pas ce que ça peut donner sur les perfs ensuite, mais je ne connais pas d'autre méthode pour "passer" un noeud d'un document à l'autre.



/*
coq
MVP Visual C#
*/
samedi 4 mars 2006 à 15:13:01 | Re : Création d'un document Xml à partir d'un autre

coq

Administrateur CodeS-SourceS
Euh, j'ai un doute là : ton document final sera donc un clone du modèle non (mis à part les données, les noeuds supplémentaires etc) ?



/*
coq
MVP Visual C#
*/
samedi 4 mars 2006 à 15:40:10 | Re : Création d'un document Xml à partir d'un autre

cfz

Oui c'est bien ça... malheureusement OuterXml est en lecture seule, la solution que je retiens donc pour le moment est d'utiliser InnerXml, puis de copier les attributs les uns après les autres à l'aide d'un foreach.

pour info j'explique un peu mieux mon cas... (ptet que je m'y prend mal)

j'ai un document XmlTemplate qui dois me servir de base (simplifié ici au minimum... en effet, il est prévu d'y ajouter de nouveaux sous-noeuds au fur et à mesure de l'avancement du développement) :
XmlTemplate :

<?
xml version="1.0" encoding="utf-8" ?>
<
Seasons>
   <
Season Identifiant="">
      <
Description></Description>
      <
Periodes>
         <!--
<Periode Begin="" End=""></Periode>-->
      </
Periodes>
   </
Season>
</
Seasons>

Celui-ci me permet de générer un document XmlSeasons.Xml comprenant plusieurs noeuds <Season>.
Ainsi, à chaque fois que l'utilisateur décide d'ajouter une "saison", je copie l'ensemble des noeuds de XmlTemplate à la fin de XmlSeasons.Xml (en y ajoutant bien entendu les bon paramètres (description, identifiant, etc...).

Merci en tout cas pour ton aide.

samedi 4 mars 2006 à 16:04:42 | Re : Création d'un document Xml à partir d'un autre

coq

Administrateur CodeS-SourceS
Réponse acceptée !
Je pense qu'il y a moyen de faire autrement mais je ne maitrise pas encore tous les aspects des manipulations Xml.

Sinon j'avais complètement oublier l'existence de la méthode XmlDocument.ImportNode, qui devrait résoudre ton problème sans tuer les performances avec InnerXml.

Copie de noeuds existants d'un document à un autre


/*
coq
MVP Visual C#
*/
samedi 4 mars 2006 à 16:05:09 | Re : Création d'un document Xml à partir d'un autre

cfz

Pour info, voilà la fonction que j'ai écrite, question performence je n'ai fait aucun test... je ferais les tests plus tard.. lorsque j'aurais suffisamment avancé sur mon projet

/// <summary>
/// Fonction permettant d'ajouter un noeud Xml quelconque à un document Xml
/// </summary>
/// <param name="XmlDoc">Document Xml où l'on ajoute le noeud</param>
/// <param name="XmlChildOutside">Noeud Xml devant être copié</param>
/// <returns></returns>
public static XmlNode AppendChildOutside(XmlDocument XmlDoc, XmlNode XmlChildOutside)
{
XmlNode XmlChild = null;
XmlAttribute XmlAttrib = null;
#region Création du nouveau noeud
XmlChild = XmlDoc.CreateElement(XmlChildOutside.Name);
XmlChild.InnerXml = XmlChildOutside.InnerXml;
#region Ajout des attributs
foreach (XmlAttribute XmlAttribOutside in XmlChildOutside.Attributes)
{
XmlAttrib = XmlDoc.CreateAttribute(XmlAttribOutside.Name);
XmlAttrib.InnerXml = XmlAttribOutside.InnerXml;
XmlChild.Attributes.Append(XmlAttrib);
}
#endregion
#endregion
return XmlChild;
}

samedi 4 mars 2006 à 16:10:29 | Re : Création d'un document Xml à partir d'un autre

cfz

Bien vu ;)
il ne me reste plus qu'a remplacer la fonction que je viens d'écrire ;)
ca marche nickel avec ImportNode
ca me paraissait bizarre qu'une telle fonction n'existait pas ;)
Merci pour tou++
samedi 4 mars 2006 à 16:16:10 | Re : Création d'un document Xml à partir d'un autre

coq

Administrateur CodeS-SourceS
Oui moi aussi ^^

PS : j'ai retirer la réponse acceptée sur l'utilisation de InnerXml, qui du coup est devenue totalement ridicule



/*
coq
MVP Visual C#
*/


Cette discussion est classée dans : xml, document, template, xmldocument, xmlfinal


Répondre à ce message

Sujets en rapport avec ce message

[ASP][C#] Validation de fichier XML [ par vonbier ] Salut,j'ai crée un Web service qui reçoit en paramètre un fichier XML. La première chose que je voudrais qu'il fasse, c'est de checker si ce fichier e [C#]Comment fermé un xml ouvert par XmlDocument. [ par PascalCmoa ] PascalCmoa email: PascalCmoaBonjour à tous <img src=/img obtenir les attributs d'un noeud d'un document xml [ par godefrw ] Bonjour, je cherche à obtenir la valeur d'un attribut d'un noeud d'un fichier Xml. j'ai charger mon fichier dans un XmlDocument. Avec un XmlReader c'e XML [ par dibouched ] Bonjour , je viens de commencer  à utiliser les document XML avec c#pour lire le continu d'un document XML j'ai utlise XmlDoc =new XmlDocument(); Copie d'un XMLNodeList dans un document XML [ par guidance ] Bonjour, Je souhaiterais copier une arborescence xml depuis un fichier xml dans un autre xml mais sans utiliser xslt. Je creer donc un document XML C# - System.Xml.Document: Comment sauvegarder les caractères spéciaux dans le fichier xml [ par smashingraph ] Bonjour, J'ai un petit souci lors de la sauvegarde de mon fichier xml. J'utilises une instance de la classe System.Xml.Document. Je charges un docum Définir une base de langue à l'aide d'Xml [ par cfz ] Bonjour, Etant un ancien développeur VB6 je souhaite me remettre au gout du jour avec .Net et C# depuis quelques jours... mais ce n'est pas toujours t comment représenter un document xml en treeViewer [ par moha_yougo ] je suis débutant je veut représenter des fichiers xml avec treeview comment le faire [ xml/c#] comment représenter xml document (élément et attributs) dans TreeViewer [ par moha_yougo ] je veut représenter un document xml (élément et attributs) dans un TeeVieweraidez moi a le faire enregistrer mon XML dans une string et non dans un fichier. [ par mathmax ] Bonjour,Voilà, j'ai un document XML dans lequel j'aimerais faire des modifications de type string (remplaçement de chaine de caractères, ...) et des m


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,671 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales