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

VB 6 et antérieur Discussion :

xpath query pb avec namespace prefix [vb6-msxml]


Sujet :

VB 6 et antérieur

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 4
    Par défaut xpath query pb avec namespace prefix [vb6-msxml]
    Bonjour,
    je souhaites effectuer une query xpath sur un doc xml.
    j'utilises microsoft visual basic 6 et msxml.
    le problème vient du fichier xml que je prends en entré:
    en effet, ce fichier contient un prefix à chaque balise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <my:Date></my:Date>
    <my:Author></my:Author>
    <my:Product_name>TA2000</my:Product_name>
    <my:Customer_name>PSA</my:Customer_name>
    ainsi lorsque j'effectue un selectsinglenode avec indication de "my:" dans la requete xpath,
    en ayant declarer le namespace de la facon suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    doc_4.setProperty "SelectionNamespaces", "xmlns:my='http://schemas.microsoft.com/office/infopath/2003/myXSD/2005-01-24T08:41:02'"
    j'ai le problème suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    reference to undeclared namespace prefix:'my'
    sans indication du my dans la requete, le retoure est null.
    j'ai essayer avec l'expression ci dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    selectnodes("//*[name()='my:nom_balise']")
    mais j'ai aussi un retour null...
    je me demande alors si on peut indiquer un schema(xsd) comme namespace ou bien un formulaire infopath(xsn)?
    je n'ai plus trop d'idée!!!
    merci de me venir en aide.

  2. #2
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 133
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Es-tu obligé de les garder ces préfixes ? (Voir ici)

    Ben, sinon, ceci doit pouvoir t'aider...

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 4
    Par défaut
    oui, je suis obligé de gardé le prefix. du fait que je n'ai pas la possibilité de le supprimer: je ne suis pas en charge de la gestion du doc!
    mais c'est la solution qui fonctionne le mieux!(jai fait un test...)

    cependant j'ai trouvé une solution sous .net avec l'utilisation de XmlNamespaceManager.
    cependant, je ne sais pas si cela existe sous visual basic 6 et la bibliothèque msxml4.0(ou 5.0)???...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dim nsmgr as new xmlnamespacemanager(doc.nametable)
    nsmgr.addnamespace("nom_prefix","urn:chemin-schema")
    doc.selectsinglenode("nom_prefix:nom_balise/",nsmgr)

  4. #4
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 133
    Billets dans le blog
    5
    Par défaut
    Euh là, je ne sais plus...
    Peut-être ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim nsmgr As MSXML2.MXNamespaceManager40
    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0

  5. #5
    Futur Membre du Club
    Inscrit en
    Juin 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 4
    Par défaut
    je n'arrive varaiment pas à faire fonction la namespace manager...
    les propriétés ne sont pas identiques entre msxml et .net ...
    pour le .net on a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    nsp=new xmlnamespacemanager(doc.nametable)
    nsp.addnamespace("prefix", "urn:xx")
    et ceci doit nous permettre de faire un selectsinglmenode("path",nsp)
    mais je n'y parvient pas...
    j'ai essayé de la maniere suivante:
    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
    Dim doc_4 As MSXML2.DOMDocument40 'XPathDocument
        Set doc_4 = New DOMDocument40
        'doc_4.setProperty "SelectionNamespaces", "xmlns:my='urn:schemas-microsoft-com:office:infopath:ECN-RN-template:-myXSD-2005-01-24T08-41-02'"
        doc_4.Load ("D:\S118047532C0.xml") 'S118047532C0.xml ou ecn
        doc_4.setProperty "SelectionLanguage", "XPath"
     
        Dim el As IXMLDOMNode
        Set el = doc_4.document_element
        If el Is Nothing Then
            MsgBox "element do not exist"
        Else
            MsgBox "element exist"
            Text1.Text = el.xml
            Dim first_node As IXMLDOMNode
            Set first_node = el.firstChild
            'marche pour ecn
            'Dim second_node As IXMLDOMNode
            'Set second_node = first_node.childNodes.Item(0)
            'Text1.Text = second_node.Text
     
        End If
    le problème est que ceci fonctionne pour des fichier "normaux" sans prefix namespace.
    dés que j'utilise un fichier ayant un namespace j'ai null en retour.
    le docelement retourne null!
    avec doc.selectsinglenode("/") ca passe mais je n'ai pas de contenu xml...
    que faire???!!!

  6. #6
    Futur Membre du Club
    Inscrit en
    Juin 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 4
    Par défaut la solution barbare!
    il ne faut pas oublier qu'un fichier xml reste un fichier...
    aprés une brève periode de cogitation... :trouve:

    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
    Dim line_read, data, result As String
    data = ""
    Dim nb_file As Long
    nb_file = FreeFile() 'obtenir un numero de fichier dispo
    Open "D:\S118047532C0.xml" For Input As #nb_file
    10 Line Input #nb_file, line_read
        data = data & line_read
    If EOF(nb_file) <> True Then GoTo 10
    Close #nb_file
     
    Dim first_tab() As String
    Dim second_tab() As String
     
    If data <> "" Then
        first_tab = Split(data, "<my:Product_name>")
        If first_tab(1) <> "" Then
            second_tab = Split(first_tab(1), "</my:Product_name>")
            If second_tab(0) <> "" Then
            result = second_tab(0)
            MsgBox result
            Else
            MsgBox "rien dans second split"
            End If
        Else
            MsgBox "rien dans premier split"
        End If
    Else
    MsgBox "rien dans fichier"
    End If
    voila c barbare mais sa marche!!!
    enkor une victoire de do le do

  7. #7
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 133
    Billets dans le blog
    5
    Par défaut
    Mouais...
    J'ai pas eu le tps d'approndir mais je pense qu'il doit y avoir une solution...
    As-tu essayé de parser avec un XSL...
    Voit avec GrandFather (s'il est là), il doit pour t'aider.

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0

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

Discussions similaires

  1. [ASA] J'ai besoin d'aide avec sybase et vb6 svp !!
    Par tibo830 dans le forum SQL Anywhere
    Réponses: 7
    Dernier message: 12/05/2006, 10h09
  2. Requete parametrée avec CristalReport de VB6?
    Par bonsam dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 13/12/2005, 09h22
  3. [XSLT] Probleme de selection avec namespaces
    Par Ludo_xml dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 01/06/2005, 14h32
  4. XML / Xpath -> une solution avec Builder?
    Par say dans le forum C++Builder
    Réponses: 3
    Dernier message: 12/05/2005, 11h56
  5. movenext avec mysql et vb6
    Par bypbop dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 17/02/2005, 14h51

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