OVH Cloud OVH Cloud

Récupérer du XML à partir d'une URL + Flux XML ?

8 réponses
Avatar
Patrice
Bonjour,

Je voudrais récupérer dans une variable une arborescence XML qui se trouve
dans un objet WebBrowser, WebBrowser que j'ai exécuté à partir d'une URL en
lui envoyant un FLUX XML.

Si quelqu'un a une idée, ou même une autre solution afin d'éviter un
WebBrowser, merci d'avance.

Patrice

8 réponses

Avatar
ng
Salut,

Pourquoi ne pas recupèrer la page avec URLDownloadToFile() puis parser l'XML
avec un parseur XML quelconque ?

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

Patrice wrote:
Bonjour,

Je voudrais récupérer dans une variable une arborescence XML qui se
trouve dans un objet WebBrowser, WebBrowser que j'ai exécuté à partir
d'une URL en lui envoyant un FLUX XML.

Si quelqu'un a une idée, ou même une autre solution afin d'éviter un
WebBrowser, merci d'avance.

Patrice


Avatar
Josselin Jouannet
Bonjour j'ai eu un cas similaire, je suis passer par dom et une procedure
recurssive ça a bien marcher.

1 declarer la référence xml dans le projet

2 ouverture du fichier.

Public Sub BrowseXMLDocument(ByVal filename As String
'---------------------------------------------------------------------------------------
' Module : Xml
' Objet :Prise en charge du fichier xm
'---------------------------------------------------------------------------------------
'Declaration
Dim xmlDoc As DOMDocument 'Document xml
Dim RootElt As IXMLDOMElement 'Noeud root
'init
Xml.bStopBrowsing = False
Set xmlDoc = New DOMDocument
xmlDoc.async = False
'Traitement
xmlDoc.Load filename 'ouverture du fichier
Set RootElt = xmlDoc.documentElement
If Not RootElt Is Nothing Then 'si le fichier a ete trouvé, si il n'est
pas egale a nothing
Select Case RootElt.firstChild.BaseNam
Case "FAMILLE"
Call BrowseChildNodes4Famille(RootElt)
' etc et ainsi de suite si tu as plusieurs fichiers
End Select
Else
MsgBox filename & "incompatible"
End If
End Sub

3 on est dans le flux xml et on traite l'arborescence (l'algo est plus
facile si ton fichier xml a un descripteur, mais dans mon cas il été brut
donc on traite par des case)

Private Sub BrowseChildNodes4Famille(root_node As IXMLDOMNode
'---------------------------------------------------------------------------------------
' Module : Xml
' Procedure : BrowseChildNodes4Famille
' Objet : Traitement du fichier xml Famill
'---------------------------------------------------------------------------------------
Dim i As Long 'indice de noeud
For i = 0 To root_node.childNodes.length - 1
If root_node.childNodes.Item(i).nodeType = NODE_ELEMENT Then
Select Case root_node.childNodes.Item(i).BaseName
Case "FAMILLE" 'cest le nom de la table
'traitement
Case "CODE" 'se sont les champs"
MaValeurdecode = root_node.childNodes.Item(i).Text
Case "LIBELLE"
MaValeurdelibelle = root_node.childNodes.Item(i).Text
'etc......
End Select
Call BrowseChildNodes4Famille(root_node.childNodes(i))
'<----recursivitée
End If
Next
End Sub

Voila tu as ouvert ton fichier et traité le flux, de plus DOM possède
beaucoup d'autres méthode assez pratiques et bien documentées.
j'espere que cela t'aideras.
@+

"Patrice" a écrit :

Bonjour,

Je voudrais récupérer dans une variable une arborescence XML qui se trouve
dans un objet WebBrowser, WebBrowser que j'ai exécuté à partir d'une URL en
lui envoyant un FLUX XML.

Si quelqu'un a une idée, ou même une autre solution afin d'éviter un
WebBrowser, merci d'avance.

Patrice


Avatar
Josselin Jouannet
Bonjour j'ai eu un cas similaire, je suis passer par dom et une procedure
recurssive ça a bien marcher.

1 declarer la référence xml dans le projet

2 ouverture du fichier.

Public Sub BrowseXMLDocument(ByVal filename As String
'---------------------------------------------------------------------------------------
' Module : Xml
' Objet :Prise en charge du fichier xm
'---------------------------------------------------------------------------------------
'Declaration
Dim xmlDoc As DOMDocument 'Document xml
Dim RootElt As IXMLDOMElement 'Noeud root
'init
Xml.bStopBrowsing = False
Set xmlDoc = New DOMDocument
xmlDoc.async = False
'Traitement
xmlDoc.Load filename 'ouverture du fichier
Set RootElt = xmlDoc.documentElement
If Not RootElt Is Nothing Then 'si le fichier a ete trouvé, si il n'est
pas egale a nothing
Select Case RootElt.firstChild.BaseNam
Case "FAMILLE"
Call BrowseChildNodes4Famille(RootElt)
' etc et ainsi de suite si tu as plusieurs fichiers
End Select
Else
MsgBox filename & "incompatible"
End If
End Sub

3 on est dans le flux xml et on traite l'arborescence (l'algo est plus
facile si ton fichier xml a un descripteur, mais dans mon cas il été brut
donc on traite par des case)

Private Sub BrowseChildNodes4Famille(root_node As IXMLDOMNode
'---------------------------------------------------------------------------------------
' Module : Xml
' Procedure : BrowseChildNodes4Famille
' Objet : Traitement du fichier xml Famill
'---------------------------------------------------------------------------------------
Dim i As Long 'indice de noeud
For i = 0 To root_node.childNodes.length - 1
If root_node.childNodes.Item(i).nodeType = NODE_ELEMENT Then
Select Case root_node.childNodes.Item(i).BaseName
Case "FAMILLE" 'cest le nom de la table
'traitement
Case "CODE" 'se sont les champs"
MaValeurdecode = root_node.childNodes.Item(i).Text
Case "LIBELLE"
MaValeurdelibelle = root_node.childNodes.Item(i).Text
'etc......
End Select
Call BrowseChildNodes4Famille(root_node.childNodes(i))
'<----recursivitée
End If
Next
End Sub

Voila tu as ouvert ton fichier et traité le flux, de plus DOM possède
beaucoup d'autres méthode assez pratiques et bien documentées.
j'espere que cela t'aideras.
@+

"Patrice" a écrit :

Bonjour,

Je voudrais récupérer dans une variable une arborescence XML qui se trouve
dans un objet WebBrowser, WebBrowser que j'ai exécuté à partir d'une URL en
lui envoyant un FLUX XML.

Si quelqu'un a une idée, ou même une autre solution afin d'éviter un
WebBrowser, merci d'avance.

Patrice


Avatar
Josselin Jouannet
Bonjour j'ai eu un cas similaire, je suis passer par dom et une procedure
recurssive ça a bien marcher.

1 declarer la référence xml dans le projet

2 ouverture du fichier.

Public Sub BrowseXMLDocument(ByVal filename As String
'---------------------------------------------------------------------------------------
' Module : Xml
' Objet :Prise en charge du fichier xm
'---------------------------------------------------------------------------------------
'Declaration
Dim xmlDoc As DOMDocument 'Document xml
Dim RootElt As IXMLDOMElement 'Noeud root
'init
Xml.bStopBrowsing = False
Set xmlDoc = New DOMDocument
xmlDoc.async = False
'Traitement
xmlDoc.Load filename 'ouverture du fichier
Set RootElt = xmlDoc.documentElement
If Not RootElt Is Nothing Then 'si le fichier a ete trouvé, si il n'est
pas egale a nothing
Select Case RootElt.firstChild.BaseNam
Case "FAMILLE"
Call BrowseChildNodes4Famille(RootElt)
' etc et ainsi de suite si tu as plusieurs fichiers
End Select
Else
MsgBox filename & "incompatible"
End If
End Sub

3 on est dans le flux xml et on traite l'arborescence (l'algo est plus
facile si ton fichier xml a un descripteur, mais dans mon cas il été brut
donc on traite par des case)

Private Sub BrowseChildNodes4Famille(root_node As IXMLDOMNode
'---------------------------------------------------------------------------------------
' Module : Xml
' Procedure : BrowseChildNodes4Famille
' Objet : Traitement du fichier xml Famill
'---------------------------------------------------------------------------------------
Dim i As Long 'indice de noeud
For i = 0 To root_node.childNodes.length - 1
If root_node.childNodes.Item(i).nodeType = NODE_ELEMENT Then
Select Case root_node.childNodes.Item(i).BaseName
Case "FAMILLE" 'cest le nom de la table
'traitement
Case "CODE" 'se sont les champs"
MaValeurdecode = root_node.childNodes.Item(i).Text
Case "LIBELLE"
MaValeurdelibelle = root_node.childNodes.Item(i).Text
'etc......
End Select
Call BrowseChildNodes4Famille(root_node.childNodes(i))
'<----recursivitée
End If
Next
End Sub

Voila tu as ouvert ton fichier et traité le flux, de plus DOM possède
beaucoup d'autres méthode assez pratiques et bien documentées.
j'espere que cela t'aideras.
@+


"Patrice" a écrit :

Bonjour,

Je voudrais récupérer dans une variable une arborescence XML qui se trouve
dans un objet WebBrowser, WebBrowser que j'ai exécuté à partir d'une URL en
lui envoyant un FLUX XML.

Si quelqu'un a une idée, ou même une autre solution afin d'éviter un
WebBrowser, merci d'avance.

Patrice


Avatar
Patrice
Merci beaucoup, j'suis en train de tester mais apparement la variable XML
n'est pas déclaré ou reconnu dans le projet.

Pourtant j'ai bien déclaré la référence Microsoft XML version 4.

Patrice

"Josselin Jouannet" a écrit :

'Declaration
Dim xmlDoc As DOMDocument 'Document xml
Dim RootElt As IXMLDOMElement 'Noeud root
'init
Xml.bStopBrowsing = False
Set xmlDoc = New DOMDocument
xmlDoc.async = False



"Patrice" a écrit :

> Bonjour,
>
> Je voudrais récupérer dans une variable une arborescence XML qui se trouve
> dans un objet WebBrowser, WebBrowser que j'ai exécuté à partir d'une URL en
> lui envoyant un FLUX XML.
>
> Si quelqu'un a une idée, ou même une autre solution afin d'éviter un
> WebBrowser, merci d'avance.
>
> Patrice


Avatar
Josselin Jouannet
C'est de ma faute, il n'y a pas de variable XML, c'est le nom de mon module
(j'ai pas assez epurer avant de poster;-),
seul :
Dim xmlDoc As DOMDocument 'Document xml
Dim RootElt As IXMLDOMElement 'Noeud root
sont necesaires
Xml.bStopBrowsing = False est une variable perso pour arret d'urgence
@+


"Patrice" a écrit :

Merci beaucoup, j'suis en train de tester mais apparement la variable XML
n'est pas déclaré ou reconnu dans le projet.

Pourtant j'ai bien déclaré la référence Microsoft XML version 4.

Patrice

"Josselin Jouannet" a écrit :

> 'Declaration
> Dim xmlDoc As DOMDocument 'Document xml
> Dim RootElt As IXMLDOMElement 'Noeud root
> 'init
> Xml.bStopBrowsing = False
> Set xmlDoc = New DOMDocument
> xmlDoc.async = False

> "Patrice" a écrit :
>
> > Bonjour,
> >
> > Je voudrais récupérer dans une variable une arborescence XML qui se trouve
> > dans un objet WebBrowser, WebBrowser que j'ai exécuté à partir d'une URL en
> > lui envoyant un FLUX XML.
> >
> > Si quelqu'un a une idée, ou même une autre solution afin d'éviter un
> > WebBrowser, merci d'avance.
> >
> > Patrice


Avatar
Patrice
Mon fichier XML est incompatible.

Par contre y'a pas une autre solution pour éviter de créer le fichier XML et
de le lire ensuite ?
Seulement avec une URL et un flux XML avoir l'aborescence du XML ?

Patrice

"Josselin Jouannet" a écrit :

C'est de ma faute, il n'y a pas de variable XML, c'est le nom de mon module
(j'ai pas assez epurer avant de poster;-),
seul :
Dim xmlDoc As DOMDocument 'Document xml
Dim RootElt As IXMLDOMElement 'Noeud root
sont necesaires
Xml.bStopBrowsing = False est une variable perso pour arret d'urgence
@+


"Patrice" a écrit :

> Merci beaucoup, j'suis en train de tester mais apparement la variable XML
> n'est pas déclaré ou reconnu dans le projet.
>
> Pourtant j'ai bien déclaré la référence Microsoft XML version 4.
>
> Patrice
>
> "Josselin Jouannet" a écrit :
>
> > 'Declaration
> > Dim xmlDoc As DOMDocument 'Document xml
> > Dim RootElt As IXMLDOMElement 'Noeud root
> > 'init
> > Xml.bStopBrowsing = False
> > Set xmlDoc = New DOMDocument
> > xmlDoc.async = False
>
> > "Patrice" a écrit :
> >
> > > Bonjour,
> > >
> > > Je voudrais récupérer dans une variable une arborescence XML qui se trouve
> > > dans un objet WebBrowser, WebBrowser que j'ai exécuté à partir d'une URL en
> > > lui envoyant un FLUX XML.
> > >
> > > Si quelqu'un a une idée, ou même une autre solution afin d'éviter un
> > > WebBrowser, merci d'avance.
> > >
> > > Patrice


Avatar
Josselin Jouannet
Si le flux xml est invalide (en gros tu ne peux meme pas le lire avec ie) tu
pourras pas faire grand chose, soit tu le rend valide, soit tu le traite
comme un fichier text.
un des principal cas d'invalidité xml est un mauvais charset (charset
anglais, et text avec "é" ou "è" par exemple).
- les autres methodes d'exploitation :
-ado.net (un vrai bonheur), mais on est dans le forum vb6.
-ado j'ai vu quelques sources trainer, mais la validité xml est encore
plus drastique (j'ai jamais réussi a le faire fonctionné sans descripteur).
-des api xml (faut etre a l'aise avec les api).
-coder son propre parsers (mais la ça prend du temp)
enfin le fait que tu utilise une URL et un flux XML ne t'empeche pas
d'utilisé DOM, il le gere comme un fichier.
@+

"Patrice" a écrit :

Mon fichier XML est incompatible.

Par contre y'a pas une autre solution pour éviter de créer le fichier XML et
de le lire ensuite ?
Seulement avec une URL et un flux XML avoir l'aborescence du XML ?

Patrice

"Josselin Jouannet" a écrit :

> C'est de ma faute, il n'y a pas de variable XML, c'est le nom de mon module
> (j'ai pas assez epurer avant de poster;-),
> seul :
> Dim xmlDoc As DOMDocument 'Document xml
> Dim RootElt As IXMLDOMElement 'Noeud root
> sont necesaires
> Xml.bStopBrowsing = False est une variable perso pour arret d'urgence
> @+
>
>
> "Patrice" a écrit :
>
> > Merci beaucoup, j'suis en train de tester mais apparement la variable XML
> > n'est pas déclaré ou reconnu dans le projet.
> >
> > Pourtant j'ai bien déclaré la référence Microsoft XML version 4.
> >
> > Patrice
> >
> > "Josselin Jouannet" a écrit :
> >
> > > 'Declaration
> > > Dim xmlDoc As DOMDocument 'Document xml
> > > Dim RootElt As IXMLDOMElement 'Noeud root
> > > 'init
> > > Xml.bStopBrowsing = False
> > > Set xmlDoc = New DOMDocument
> > > xmlDoc.async = False
> >
> > > "Patrice" a écrit :
> > >
> > > > Bonjour,
> > > >
> > > > Je voudrais récupérer dans une variable une arborescence XML qui se trouve
> > > > dans un objet WebBrowser, WebBrowser que j'ai exécuté à partir d'une URL en
> > > > lui envoyant un FLUX XML.
> > > >
> > > > Si quelqu'un a une idée, ou même une autre solution afin d'éviter un
> > > > WebBrowser, merci d'avance.
> > > >
> > > > Patrice