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 :

Namespace et XmlDocument


Sujet :

C#

  1. #1
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 051
    Points : 1 638
    Points
    1 638
    Par défaut Namespace et XmlDocument
    Bonjour,

    Pour le besoin d'un client, j'ai besoin via un logiciel (BizTalk) de modifier le namespace d'un fichier XML.

    Je me confronte à un problème.

    Avant ceci, voici le début du fichier XML :
    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
    <?xml version="1.0" encoding="utf-8"?>
    <ns0:SBTComptage xmlns:ns0="http://tempuri.org/SBTComptage.xsd">
    	<ns0:Header>
    		<ns0:Environnement>PROD</ns0:Environnement>
    		<ns0:DocDate>2015-01-08</ns0:DocDate>
    		<ns0:Version>1.0</ns0:Version>
    		<ns0:DocType>Comptage</ns0:DocType>
    		<ns0:Emetteur>InfraJ</ns0:Emetteur>
    		<ns0:Unite>kWh</ns0:Unite>
    		<ns0:Temperature>25°</ns0:Temperature>
    		<ns0:Expediteur>2000</ns0:Expediteur>
    	</ns0:Header>
    	<ns0:ListOfGasDay>
    		<ns0:GasDay>
    		</ns0:GasDay>
    	</ns0:ListOfGasDay>
    J'aimerais modifier la valeur de mon attribut xmlns:ns0

    XmlDocument

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    string targetNS = "monnamespace";
    XmlDocument message = new XmlDocument();
    message.Load("fichier.xml");
    message.DocumentElement.SetAttribute("xmlns:ns0", targetNS);
    Le problème est lorsque je passe par un XmlDocument, ça me modifier bien mon attribut xmlns:ns0, mais automatiquement une balise xmlns est ajouté aux autres noeuds :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <ns0:SBTComptage xmlns:ns0="http://monnamespace">
      <ns0:Header xmlns:ns0="http://tempuri.org/SBTComptage.xsd">
        <ns0:Environnement>PROD</ns0:Environnement>
        <ns0:DocDate>2015-01-08</ns0:DocDate>
        <ns0:Version>1.0</ns0:Version>
        <ns0:DocType>Comptage</ns0:DocType>
        <ns0:Emetteur>InfraJ</ns0:Emetteur>
        <ns0:Unite>kWh</ns0:Unite>
        <ns0:Temperature>25°</ns0:Temperature>
        <ns0:Expediteur>2000</ns0:Expediteur>
      </ns0:Header>
      <ns0:ListOfGasDay xmlns:ns0="http://tempuri.org/SBTComptage.xsd">
        <ns0:GasDay>
    Est-ce normal que l'attribut xmlns:ns0 soit ajouté aux autres noeuds ?

    Mon approche est mauvaise ?

    En regardant le détails de l'objet "message" en debug, je constate que le innerxml reste correct, cependant en passant par DocumentElement l'attribut xmlns est ajouté.

    Je assez novice côté namespace du coup je galère un peu.

    Merci d'avance.
    Règle N° 1 : Si tout va bien, ne touchez à rien.

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Tu peux utiliser ceci :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var message = new XmlDocument();
    message.Load("fichier.xml");
    message.LoadXml(message.OuterXml.Replace(message.DocumentElement.NamespaceURI, targetNS));
    Cela t'évitera les effets de bord sur les autres noeuds
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 051
    Points : 1 638
    Points
    1 638
    Par défaut
    C'est parfait !

    Merci bien pour ton aide, j'étais pas loin .. mais assez loin en même temps

    Je met en résolu.
    Règle N° 1 : Si tout va bien, ne touchez à rien.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB.NET] XmlDocument et Namespace
    Par dharkan dans le forum Débuter
    Réponses: 1
    Dernier message: 23/03/2015, 12h30
  2. XMLDocument et namespace
    Par FlyByck dans le forum Langage
    Réponses: 2
    Dernier message: 17/06/2009, 05h48
  3. [XML] xmlreader namespace XMLDocument
    Par Oxy42 dans le forum Framework .NET
    Réponses: 1
    Dernier message: 07/12/2006, 17h45
  4. [Debutant][Divers] - namespace et attributs
    Par sebbb dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 10/06/2003, 14h40
  5. Erreur récurrente (namespace)
    Par [DreaMs] dans le forum XMLRAD
    Réponses: 3
    Dernier message: 25/02/2003, 10h27

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