Xml CraeteElement ? [Résolu]

Signaler
Messages postés
57
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
20 avril 2011
-
Messages postés
57
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
20 avril 2011
-
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é ....

14 réponses

Messages postés
129
Date d'inscription
mardi 22 novembre 2005
Statut
Membre
Dernière intervention
30 décembre 2007
3
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 />
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
49
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-
Messages postés
57
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
20 avril 2011

justement la surcharge qui demande un prefix fait la même erreur ..... c'est pourquoi je comprends pas
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
49
Ce que tu veux ce n'est pas un prefix c'est plutôt un namespace (3ème paramètre)!
Non?

<hr />
-Blog-
Messages postés
57
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
20 avril 2011

avec ta syntaxe


XmlElement
elem = doc.CreateElement(

"prefix"
,

"lName"
,

"ns"
);








j'obtiens



<
prefix:lName
xmlns:prefix
="

ns

"


/>



et moi je veux




 

/>
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
49
Hum, jettes voire un tit coup d'oeil ici

<hr />
-Blog-
Messages postés
57
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
20 avril 2011

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 ...
Messages postés
129
Date d'inscription
mardi 22 novembre 2005
Statut
Membre
Dernière intervention
30 décembre 2007
3
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.
Messages postés
57
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
20 avril 2011

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

 
Messages postés
57
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
20 avril 2011

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
Messages postés
129
Date d'inscription
mardi 22 novembre 2005
Statut
Membre
Dernière intervention
30 décembre 2007
3
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é).
Messages postés
57
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
20 avril 2011

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
Messages postés
57
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
20 avril 2011

Merci beaucoup pour ton aide

je vais regarder tout ceci et je te dis ....
Messages postés
57
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
20 avril 2011

ton petit bout de code m'a aidé
Cela focntionnne maintenant .....

Merci beaucoup

A ++