Xml CraeteElement ? [Résolu]

Messages postés
57
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
20 avril 2011
- - Dernière réponse : lenoil55
Messages postés
57
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
20 avril 2011
- 31 janv. 2007 à 18:01
Bonjour à tous,


je souhaiterais créer un document xml avec la syntaxe suivante:
<monPrefix:monNoeud></monPrefix:monNoeud>


J'utilise le code suivant :
<!-- BEGIN TEMPLATE: bbcode_code -->

Code :

monDocumentXML.CreateElement("monPrefix:monNoeud")

<!-- END TEMPLATE: bbcode_code -->mais j'obtiens le résultat suivant !!! :

<monNoeud></monNoeud> quand j'utilise le innerXML


Pourquoi je ne vois monPrefix ?


Comment faire pour avoir la sortie que je veux ?


Merci car je suis dérouté ....
Afficher la suite 

14 réponses

Meilleure réponse
Messages postés
129
Date d'inscription
mardi 22 novembre 2005
Statut
Membre
Dernière intervention
30 décembre 2007
3
3
Merci
Voilà ce que j'ai fait (à l'arrache) et qui devrait t'aider :


<hr />

XmlDocument doc =


new

XmlDocument();


XmlElement root = doc.CreateElement(


"racine:premier"
,

"tutu"


); // Ici, l'espace de nom "tutu"
// est automatiquement associé au préfixe "racine"


doc.AppendChild(root);

// Et là, on associe explicitement le préfixe "autre" à l'espace de nom "toto"

XmlAttribute attr = doc.CreateAttribute(

"xmlns:autre"

);


attr.Value =

"toto"

;


root.Attributes.Append(attr);




// Élément sans espace de nom

XmlElement salut = doc.CreateElement(

"salut"

);


root.AppendChild(salut);

// Un élément avec l'espace de nom "tutu"

XmlElement bonjour = doc.CreateElement(


"racine:bonjour"
,

"tutu"


);


bonjour.AppendChild(doc.CreateTextNode(

"bonjour"

));


salut.AppendChild(bonjour);




// Un élément avec l'espace de nom "toto"

XmlElement revoir = doc.CreateElement(


"autre:revoir"
,

"toto"


);


revoir.AppendChild(doc.CreateTextNode(

"revoir"

));


salut.AppendChild(revoir);

<hr />Le document XML généré est le suivant :
<hr /><racine:premier xmlns:autre="toto" xmlns:racine="tutu">
  <salut>
    <racine:bonjour>bonjour</racine:bonjour>
    revoir
  </salut>
</racine:premier>
<hr />

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 5984 internautes nous ont dit merci ce mois-ci

Commenter la réponse de dgouttegattat
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
42
0
Merci
Salut,
Regarde dans les surcharges de la méthode CreateElement...
Tu dois pouvoir faire quelque chose comme ceci:

XmlElement elem = doc.CreateElement(
"prefix",
"lName",
"ns");

<hr />
-Blog-
Commenter la réponse de cs_Bidou
Messages postés
57
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
20 avril 2011
0
Merci
justement la surcharge qui demande un prefix fait la même erreur ..... c'est pourquoi je comprends pas
Commenter la réponse de lenoil55
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
42
0
Merci
Ce que tu veux ce n'est pas un prefix c'est plutôt un namespace (3ème paramètre)!
Non?

<hr />
-Blog-
Commenter la réponse de cs_Bidou
Messages postés
57
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
20 avril 2011
0
Merci
avec ta syntaxe


XmlElement
elem = doc.CreateElement(

"prefix"
,

"lName"
,

"ns"
);








j'obtiens



<
prefix:lName
xmlns:prefix
="

ns

"


/>



et moi je veux




 

/>
Commenter la réponse de lenoil55
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
42
0
Merci
Hum, jettes voire un tit coup d'oeil ici

<hr />
-Blog-
Commenter la réponse de cs_Bidou
Messages postés
57
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
20 avril 2011
0
Merci
j'ai regardé

XmlNode





xmlNodeIdentification1 = m_xmlDoc.CreateElement(
"tutu"

,

"zefzfzfzfzefzfzfzf"

,

null





);
me sort <zefzfzfzfzefzfzfzf>dd</zefzfzfzfzefzfzfzf>

XmlNode xmlNodeIdentification1 = m_xmlDoc.CreateElement("tutu"
,
"zefzfzfzfzefzfzfzf"
,
string.empty




);
me sort <zefzfzfzfzefzfzfzf>dd</zefzfzfzfzefzfzfzf>

il n'y a pas de solution alors ?
c'est franchement merdique !!!!

je peux pas avoir <tutu:zefzfzfzfzefzfzfzf>dd</zefzfzfzfzefzfzfzf>




comment faire ?au secours ...
Commenter la réponse de lenoil55
Messages postés
129
Date d'inscription
mardi 22 novembre 2005
Statut
Membre
Dernière intervention
30 décembre 2007
3
0
Merci
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.
Commenter la réponse de dgouttegattat
Messages postés
57
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
20 avril 2011
0
Merci
alors comment fais tu pour générer un truc de ce genre là ? :

<racine:premier xmlns:racine="tutu" xmlns:autre="toto">
    <salut>
                <tutu:bonjour>bonjour</tutu:bonjour>
                <toto:revoir>revoir</toto:revoir>
    </salut>
</racine>

merci pour ta réponse

 
Commenter la réponse de lenoil55
Messages postés
57
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
20 avril 2011
0
Merci
Excuses je me suis trompé

<racine:premier xmlns:racine="tutu" xmlns:autre="toto">
    <salut>
                <racine:bonjour>bonjour</racine:bonjour>
                revoir
    </salut>
</racine>

merci pour ta réponse
Commenter la réponse de lenoil55
Messages postés
129
Date d'inscription
mardi 22 novembre 2005
Statut
Membre
Dernière intervention
30 décembre 2007
3
0
Merci
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é).
Commenter la réponse de dgouttegattat
Messages postés
57
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
20 avril 2011
0
Merci
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>

merci pour ton aide
Commenter la réponse de lenoil55
Messages postés
57
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
20 avril 2011
0
Merci
Merci beaucoup pour ton aide

je vais regarder tout ceci et je te dis ....
Commenter la réponse de lenoil55
Messages postés
57
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
20 avril 2011
0
Merci
ton petit bout de code m'a aidé
Cela focntionnne maintenant .....

Merci beaucoup

A ++
Commenter la réponse de lenoil55