Xml CraeteElement ?

Résolu
lenoil55 Messages postés 57 Date d'inscription mercredi 13 juillet 2005 Statut Membre Dernière intervention 20 avril 2011 - 29 janv. 2007 à 14:43
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é ....

14 réponses

dgouttegattat Messages postés 129 Date d'inscription mardi 22 novembre 2005 Statut Membre Dernière intervention 30 décembre 2007 3
30 janv. 2007 à 16:32
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 />
3
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
29 janv. 2007 à 15:45
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-
0
lenoil55 Messages postés 57 Date d'inscription mercredi 13 juillet 2005 Statut Membre Dernière intervention 20 avril 2011
29 janv. 2007 à 16:21
justement la surcharge qui demande un prefix fait la même erreur ..... c'est pourquoi je comprends pas
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
29 janv. 2007 à 16:54
Ce que tu veux ce n'est pas un prefix c'est plutôt un namespace (3ème paramètre)!
Non?

<hr />
-Blog-
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lenoil55 Messages postés 57 Date d'inscription mercredi 13 juillet 2005 Statut Membre Dernière intervention 20 avril 2011
29 janv. 2007 à 17:38
avec ta syntaxe


XmlElement
elem = doc.CreateElement(

"prefix"
,

"lName"
,

"ns"
);








j'obtiens



<
prefix:lName
xmlns:prefix
="

ns

"


/>



et moi je veux




 

/>
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
29 janv. 2007 à 18:10
Hum, jettes voire un tit coup d'oeil ici

<hr />
-Blog-
0
lenoil55 Messages postés 57 Date d'inscription mercredi 13 juillet 2005 Statut Membre Dernière intervention 20 avril 2011
30 janv. 2007 à 08:57
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 ...
0
dgouttegattat Messages postés 129 Date d'inscription mardi 22 novembre 2005 Statut Membre Dernière intervention 30 décembre 2007 3
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.
0
lenoil55 Messages postés 57 Date d'inscription mercredi 13 juillet 2005 Statut Membre Dernière intervention 20 avril 2011
30 janv. 2007 à 11:46
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

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

merci pour ton aide
0
lenoil55 Messages postés 57 Date d'inscription mercredi 13 juillet 2005 Statut Membre Dernière intervention 20 avril 2011
30 janv. 2007 à 17:11
Merci beaucoup pour ton aide

je vais regarder tout ceci et je te dis ....
0
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
ton petit bout de code m'a aidé
Cela focntionnne maintenant .....

Merci beaucoup

A ++
0
Rejoignez-nous