IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[C# 2.0] Comment créer un fichier Xml avec gestion des espaces de noms ?


Sujet :

C#

  1. #1
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut [C# 2.0] Comment créer un fichier Xml avec gestion des espaces de noms ?
    Bonjour,

    Je travaille actuellement sur un logiciel qui échange des documents (fichiers Xml) via une connexion SSL. Plutôt que d'utiliser des fichiers Xml en dur, les charger dans une chaine pour modifier les valeurs nécessaires, je voudrais les générer via le code.

    Je sais le faire sauf quand les espaces de noms sont de la partie à priori
    J'ai des problèmes pour assigner plusieurs espaces de nom sur un même élément ainsi que pour assigner les préfixes.

    Voici à quoi ressemble le fichier Xml que je souhaite générer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <?xml version="1.0" encoding="UTF-8"?>
    <ns2:Enveloppe xmlns:ns1="..." xmlns:ns2="..." xmlns:ns3="..." Id="...">
      <ns1:Emetteur>
        <ns1:IDCL ns1:Arrondissement="..." ns1:Departement="..." ns1:Nature="..." ns3:SIREN="..."/>
        <ns1:Referent>
          <ns1:Nom>...</ns1:Nom>
          <ns1:Telephone>...</ns1:Telephone>
          <ns1:Email>...</ns1:Email>
        </ns1:Referent>
      </ns1:Emetteur>
      <ns1:AdressesRetour>
        <ns1:Email>...</ns1:Email>
      </ns1:AdressesRetour>
      <ns1:FormulairesEnvoyes>
        <ns1:Formulaire>
          <ns1:NomFichier>...</ns1:NomFichier>
        </ns1:Formulaire>
      </ns1:FormulairesEnvoyes>
      <ns2:Documents>
        <ns2:Document xmlns:ns1="..." xmlns:ns2="..." Id="...">
          <ns1:DemandeClassification xmlns:ns1="..." xmlns:ns3="..." xmlns:ns4="...">
            <ns1:DateClassification>...</ns1:DateClassification>
          </ns1:DemandeClassification>
        </ns2:Document>
      </ns2:Documents>
    </ns2:Enveloppe>
    Un exemple du code utiliser pour le générer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    XmlDeclaration xmlDeclaration = doc.CreateXmlDeclaration("1.0", "utf-8", null);
     
    XmlElement rootNode = doc.CreateElement("ns2", "Enveloppe", "...");
    rootNode.SetAttribute("Id", "ID");
    doc.InsertBefore(xmlDeclaration, doc.DocumentElement);
    doc.AppendChild(rootNode);
     
    XmlElement emetteur = doc.CreateElement("ns1", "Emetteur", null);
    rootNode.AppendChild(emetteur);
    ...
    Mais bien évidemment, je ne peux assigner qu'un seul espace de nom sur mon élément racine et mon élément emetteur se retrouve sans préfixe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?xml version="1.0" encoding="utf-8"?>
    <ns2:Enveloppe Id="ID" xmlns:ns2="...">
      <Emetteur>
        ...
      <Emetteur/>
       ...
    </ns2:Enveloppe>
    Je n'ai pas trouvé comment gérer les espaces de noms, en espérant que quelqu'un puisse m'aider

  2. #2
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    Salut StormimOn

    Est-ce que tu as pensé à utiliser les attributs !! ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    XmlAttribute about = doc.CreateAttribute("xmlns", "ns3", "...");
    Simple suggestion je n'ai pas essayé !!

  3. #3
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    Une autre idée en passant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    rootNode.SetAttribute("xmlns:ns3", "....");

  4. #4
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Non, je n'ai pas essayé avec les attributs je crois, en effet. On verra demain ce que ca donne

  5. #5
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Avec le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rootNode.SetAttribute("xmlns:ns3", "....");
    Ca fonctionne bien pour attribuer plusieurs espaces de noms, par contre je n'arrive pas à obtenir le préfixe sur les balises.

    Ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    XmlElement rootNode = doc.CreateElement("ns2", "Enveloppe", null);
    rootNode.SetAttribute("xmlns:ns1", "...");
    rootNode.SetAttribute("xmlns:ns2", "...");
    rootNode.SetAttribute("xmlns:ns3", "...");
    doc.InsertBefore(xmlDeclaration, doc.DocumentElement);
    doc.AppendChild(rootNode);
    me donne cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Enveloppe xmlns:ns1="..." xmlns:ns2="..." xmlns:ns3="...">...</Enveloppe>
    Alors que je souhaite obtenir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <ns2:Enveloppe xmlns:ns1="..." xmlns:ns2="..." xmlns:ns3="...">...</ns2:Enveloppe>

  6. #6
    Membre régulier
    Étudiant
    Inscrit en
    Janvier 2004
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2004
    Messages : 279
    Points : 106
    Points
    106
    Par défaut
    Je suis face au même problème.

    Il existe la solution de spécifier le NAMESPACE à utiliser comme ceci donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    XmlElement rootNode = doc.CreateElement("ns2", "Enveloppe", "ns2");
    On obtient alors bien :

    à la place de
    Par contre un champ avec le namespace vient s'ajouter comme attribut dans le tag.

    Comment faire pour ne pas afficher le namespace ?

    Avec le Namespace, ma requête ne fonctionne pas. Mais il faut que je le spécifie devant, avec les ":".

    Comment faire ?

  7. #7
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    Je sais que ça ne se fait pas trop de déterrer des vieux sujets mais je suis tomber sur celui-ci en cherchant une réponse à mon problème alors je donne la solution dès fois que quelqu'un en aurait besoin.

    Dans le code donné dans le message précédent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    XmlElement rootNode = doc.CreateElement("ns2", "Enveloppe", "ns2");
    Il faut remplacer le 3e paramètre par le nom complet du namespace. De cette manière, l'attribut xmlns ne viendra pas s'ajouter dans la balise de l'élément "Enveloppe".

Discussions similaires

  1. [DOM] Comment generer ce fichier XML avec DOM ?
    Par jlassira dans le forum Format d'échange (XML, JSON...)
    Réponses: 18
    Dernier message: 10/04/2006, 09h12
  2. comment ouvrir un fichier XML avec excel
    Par ALCINA dans le forum XML/XSL et SOAP
    Réponses: 7
    Dernier message: 24/03/2006, 14h42
  3. [XML] Comment parser ce fichier XML avec java !
    Par jlassira dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 13/03/2006, 12h56
  4. Réponses: 4
    Dernier message: 28/10/2005, 09h59
  5. [SimpleXML] Comment faire pour transformer un fichier XML en PHP ?
    Par magic8392 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 23/09/2005, 16h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo