dgouttegattat
Messages postés129Date d'inscriptionmardi 22 novembre 2005StatutMembreDernière intervention30 décembre 20073 30 janv. 2007 à 10:32
Salut,
Le problème, c'est que ce que tu cherches à obtenir n'est pas valide. Dans l'extrait XML suivant,
<hr /> /><hr />
le préfixe n'est associé à aucun espace de noms, ce qui n'est pas conforme aux recommendations du W3C. C'est pourquoi la surchage de XmlCreate à trois arguments (le préfixe, le nom local et l'URI d'espace de noms) génère automatiquement l'attribute xmlns :
<hr /><hr />
Il s'agit là d'un comportement normal et attendu.
En revanche, si tu ajoutes des éléments enfants, l'attribut xmlns ne sera pas répété si les enfants ont le même espace de noms.
dgouttegattat
Messages postés129Date d'inscriptionmardi 22 novembre 2005StatutMembreDernière intervention30 décembre 20073 30 janv. 2007 à 12:15
Normalement, les classes du framework n'insèrent l'attribut xmlns:... que là où c'est nécessaire, donc dans ton cas, la déclaration de l'espace de noms "toto" ne serait inséré qu'au niveau de l'élément "revoir", puisque cet espace de noms n'est pas utilisé avant.
Si tu veux forcer la déclaration de l'espace de nom à apparaître avant son utilisation, à ma connaissance il faut le faire "à la main" :
<hr />
XmlAttribute xmlns = doc.CreateAttribute("xmlns:autre");
xmlns.Value = "toto";
doc.DocumentElement.Attributes.Append(xmlns);
<hr />Dans ce cas, lorsque tu ajouteras un élément XML avec ce préfixe et cet espace de noms, la déclaration d'espace de noms ne sera pas répétée (la classe sera "consciente", si on veut, que cet espace de noms a déjà été déclaré).
lenoil55
Messages postés57Date d'inscriptionmercredi 13 juillet 2005StatutMembreDernière intervention20 avril 2011 30 janv. 2007 à 16:16
C'est ce que j'avais fait ..... en tout début de mon document XML
et c'est après que j'avais vu ce que faisais l'api .net
mais dans ton exemple tu vas arriver à écrire la ligne <racine:premier xmlns:racine="tutu" xmlns:autre="toto">
mais ensuite pour écrire la ligne <toto:revoir>revoir</toto:revoir> impossible et c'est là mon problème !
je suis d'accord qu'elle sera consciente où il faudra aller le chercher mais si tu as deux noms identiques dans deux namespaces différents comment fera t-il ?
exemple:
<tutu:bonjour>bonjour</tutu:bonjour>
<toto:bonjour>revoir</toto:bonjour>
de plus, je dois générer un xml avec le type suivant de balise donc je suis embêter :
:<racine:premier xmlns:racine="tutu" xmlns:autre="toto">
<salut>
<tutu:bonjour>bonjour</tutu:bonjour>
<toto:revoir>revoir</toto:revoir>
</salut>
</racine>