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

Windows Forms Discussion :

[VB.NET]Lire un fichier XML


Sujet :

Windows Forms

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2004
    Messages : 129
    Points : 103
    Points
    103
    Par défaut [VB.NET]Lire un fichier XML
    Bonjour,

    J'ai fait pas mal de recherche pour trouver comment lire et modifier des fichiers XML mais avant de commencer j'aimerais savoir quel serait la méthode la plus efficace et simple pour ce que je veux faire.

    Voilà, en ce moment nous avons des centaines de fichiers XML qui sont en fait des rapports. Tous ces rapports doivent être modifiers selon certains critères alors plutôt que de tous modifier à la main je veux modifier directement les fichier XML. Mon problème c'est que je m'intéresse seulement à certaines tag des fichiers XML. La plupart des exemple que je consulte boucle sur une Node pour chaque Node enfant que celle-ci contient et ainsi de suite.... J'ai vu qu'il était possible aussi de chargé les fichier dans des dataset et aussi qu'on pouvait utilise la classe XPath avec le XPathNavigator mais je ne sais pas quel méthode utiliser pour faire ce que je veux faire.

    Ce que je veux faire par exemple c'est disons que je suis sur une Node "Composant" (Un textbox, label etc..) je veux pour cette node aller lire une node Enfant propriété (disons sa couleur) si cette couleur est rouge alors je veux modifier la valeur de la node enfant Text.

    COMPOSANT - > BackgroundColor
    COMPOSANT - > Text

    En ce moment quand je suis positionné sur ma Node Composant je dois parcourir toutes les nodes Enfant pour trouver la couleur. Ensuite je les reparcours pour trouver la node text. Il doit certainement avoir une façon plus simple pour accéder directement à la node que j'ai besoin?

    Je sais qu'il y a une fonction GetByTagName mais celle-ci ne fonctionne pas quand on est sur une node.

    Merci !

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2004
    Messages : 129
    Points : 103
    Points
    103
    Par défaut
    Bon j'ai continué à faire quelques recherche et je comprends maintenant comment je dois m'y prendre mais j'ai un problème pour lequel je ne trouve pas de solution. Si je prends un fichier XML d'un exemple sur le web j'arrive à faire exactement ce que je veux. Par contre dès que j'utilise mes fichier XML ca ne fonctionne plus. J'ai remarqué que la différence est que dans le tag de ma racine j'ai ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
    Quand je n'ai pas de xmlns dans mes fichiers mon code fonctionne mais dès que j'ai des fichier XML qui ont ça je ne suis même pas capable de faire un SelectSingleNode car il ne trouve rien. Je sais que xmlns est pour XML namespace mais je n'ai aucune idée de ce que je dois pour pouvoir lire mes node sans problème???

  3. #3
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Pour lire un XML, pkoi ne pas utiliser un XmlTextReader

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2004
    Messages : 129
    Points : 103
    Points
    103
    Par défaut
    Merci pour votre réponse. En fait selon ce que j'avais lu XmlTextReader n'était pas une bonne idée dans mon cas car ma structure est assez complexe et aussi je ne veux pas accéder au contenu de façon séquentiel. C'est pour cela que j'utilise en ce moment xmlDocument mais ca ne fonctionne pas à cause du namespace.

    Voici un bout de mon 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    <?xml version="1.0" encoding="utf-8"?>
    <Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
     
      <PageHeader>
        <ReportItems>
          <Line Name="Line44">
            <Left>17.01cm</Left>
            <Top>4.312cm</Top>
            <ZIndex>19</ZIndex>
            <Width>2.169cm</Width>
            <Style>
              <BorderStyle>
                <Default>Solid</Default>
              </BorderStyle>
              <BorderColor>
                <Default>#000000</Default>
              </BorderColor>
            </Style>
          </Line>
          <Textbox Name="Text43">
            <Left>16.984cm</Left>
            <Top>3.809cm</Top>
            <ZIndex>18</ZIndex>
            <Width>2.195cm</Width>
            <Style>
              <TextAlign>Center</TextAlign>
              <PaddingLeft>0cm</PaddingLeft>
              <LineHeight>13pt</LineHeight>
              <PaddingBottom>0cm</PaddingBottom>
              <FontWeight>700</FontWeight>
              <FontSize>8pt</FontSize>
              <BorderColor>
                <Default>#000000</Default>
              </BorderColor>
              <BackgroundColor>#ffffff</BackgroundColor>
              <Color>#000000</Color>
              <PaddingRight>0cm</PaddingRight>
              <PaddingTop>0cm</PaddingTop>
            </Style>
            <Height>0.423cm</Height>
            <Value>Total Taxe</Value>
          </Textbox>      
        </ReportItems>
        <Height>4.312cm</Height>
        <PrintOnLastPage>true</PrintOnLastPage>
        <PrintOnFirstPage>true</PrintOnFirstPage>
        <Style>
          <BackgroundColor>#ffffff</BackgroundColor>
        </Style>
      </PageHeader>
    Bon j'ai enlevé beaucoup de chose juste pour expliquer mon problème. Disons que je veux accéder seulement à la balise PageHeader. Si je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim Composant As XmlNodeList = MonFichierXml.DocumentElement.SelectNodes("//PageHeader")
    Cela ne trouve rien. Si j'essais de crée un namespace:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim nsmgr As XmlNamespaceManager = New XmlNamespaceManager(MonFichierXml.NameTable)
            nsmgr.AddNamespace("rd", "http://schemas.microsoft.com/SQLServer/reporting/reportdesigner")
     
    Dim Composant As XmlNodeList = MonFichierXml.DocumentElement.SelectNodes("//PageHeader",nsmgr )
    J'ai le même problème...cela ne retourne rien.

    Si quelqu'un à une idée!!!!

    Merci !!!!

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2004
    Messages : 129
    Points : 103
    Points
    103
    Par défaut
    Personne n'a d'idée ? Si j'efface le xmlns="http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner" tout fonctionne. Le problème c'est que je ne veux pas les effacer. Comment faut-il faire alors pour que ça fonctionne?

    Merci !

  6. #6
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Je ne vois pas pourquoi le fait d'ajouter un namespace XML empêche la sélection des noeuds

    Bizarre ca....

  7. #7
    Membre actif Avatar de toniolol
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2005
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 281
    Points : 296
    Points
    296
    Par défaut
    Salut,
    si tu ne veux pas passer par un mode séquentiel, ne serait-ce pas plus simple de charger ton fichier XML dans un DataSet ? (.ReadXML())
    Puis de travailler ensuite sur ton DataSet ?
    Pensez aux règles et au qui rime avec !

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/01/2007, 12h16
  2. Réponses: 2
    Dernier message: 22/09/2006, 08h33
  3. [VB.Net] Comment lire un fichier xml ?
    Par franfran dans le forum VB.NET
    Réponses: 8
    Dernier message: 27/07/2006, 13h02
  4. [VB.NET] Lire un fichier XML
    Par vijeo dans le forum Windows Forms
    Réponses: 2
    Dernier message: 14/06/2006, 09h22
  5. Réponses: 2
    Dernier message: 26/05/2004, 17h53

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