Article View: fr.comp.text.xml
Article #8591Parcours du DOM c�t� serveur...
From: Metcalfe
Date: Sun, 16 Sep 2001 16:42
Date: Sun, 16 Sep 2001 16:42
106 lines
4828 bytes
4828 bytes
Bonjour,
Je vais �tre un peu long donc je comence tout de suite ;0)
Ma question est la suivante : comment d�terminer le niveau auquel on se
trouve lors du parcours du DOM XML ?
Pou �tre plus pr�cis, je vous donne quelques d�tails sur le contexte...
Pour une application permettant l'upload d'un fichier texte, je transforme
le flux de donn�es en un fichier xml c�t� serveur ceci afin de pouvoir
valider ce fichier gr�ce � une DTD. Par la suite, si le fichier semble
conforme � la structure attendue, je cherche � r�cup�rer les donn�es pour
les ins�rer dans une base de donn�es Oracle. Pour cela, je m'appuie sur le
DOM XML.
Un exemple de fichier upload� :
field1|field2|field3|field4
data1-1|data1-2|data1-3|data1-4
data2-1|data2-2|data2-3|data2-4
data3-1|data3-2|data3-3|data3-4
Dans ce fichier, la premi�re ligne correspond aux noms des champs �
compl�ter dans la base. Chaque autre ligne correspond � un enregistrement et
donc aux 4 informations qui viendront prendre place dans la base.
Apr�s une transformation c�t� serveur, j'obtiens le fichier xml suivant :
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE root SYSTEM "_test.dtd">
<root>
<ligne_1>
<field1>data1-1</field1>
<field2>data1-2</field2>
<field3>data1-3</field3>
<field4>data1-4</field4>
</ligne_1>
<ligne_2>
<field1>data2-1</field1>
<field2>data2-2</field2>
<field3>data2-3</field3>
<field4>data2-4</field4>
</ligne_2>
<ligne_3>
<field1>data3-1</field1>
<field2>data3-2</field2>
<field3>data3-3</field3>
<field4>data3-4</field4>
</ligne_3>
</root>
A partir de l�, j'utilise l'asp pour instancier un objet DOM et pour essayer
de r�cup�rer les informations qui seront � ins�rer dans la base. C'est l�
que je ne sais pas comment faire. Voici mon code :
Dim oXmlDoc 'As DOMDocument
Dim oParseErr 'As MSXML.IXMLDOMParseError
Dim sPath 'As String
Dim sErrText 'As String
Set oXmlDoc = Server.CreateObject("Microsoft.XMLDOM")
oXmlDoc.validateOnParse = True
oXmlDoc.async = False
sPath = Server.MapPath(".\") & "\" & param_NameFile
If oXmlDoc.Load(sPath) then
Response.Write "Le document est bien charg�<br>"
Call subDisplayNode(oXmlDoc.childNodes)
Else
Set oParseErr = oXmlDoc.parseError
'... gestion de l'erreur...
Response.Write sErrText
Set oParseErr = Nothing
End If
Set oXmlDoc = Nothing
Jusque l� tout va bien : j'instancie un objet DOM et je charge le fichier
xml que j'ai cr��. Si celui ci est valid�, j'appelle une fonction qui me
permet de parcourir l'arbre de donn�es. Cette fonction, la voici :
Private Sub subDisplayNode(param_Nodes)
Dim oNode 'As MSXML.IXMLDOMNode
For Each oNode In param_Nodes
If oNode.nodeType = 1 then
'le nom du champ est oNode.nodeName
'sa valeur sera oNode.xml
End If
If oNode.hasChildNodes Then
Call subDisplayNode(oNode.childNodes, Param_Level)
End If
Next
End Sub
Cette fonction parcourt chaque noeud et si celui ci a des noeuds enfants, la
fonction s'appelle elle m�me pour continuer le parcours de mani�re
r�cursive. En filtrant sur la propri�t� nodeType, je peux interroger les
propri�t�s nodeName et xml et ainsi obtenir respectivement le nom du champ
et sa valeur. Si c'est effectivement ce qui m'int�resse, je me retrouve avec
des r�sultats qui incluent tous les niveaux de l'arbre or seul le niveau le
plus bas de l'arbre contient les donn�es utiles. Je n'est pas trouv� de
crit�res qui me permettent de parcourir tout l'arbre mais qui ne renvoient
que les donn�es du niveau le plus bas.
D�sol� d'avoir �t� si long mais pour mes d�buts en xml, j'ai un peu de mal �
aller � l'essentiel ;)
Merci de votre aide.
Amicalement,
Metcalfe
Technical Details
Message-ID:
<9o2km9$4ii$1@neon.noos.net>Path:
arc1-ca.pugleaf.net!archiver1.google.com!newsfeed.google.com!newsfeed.stanford.edu!news.tele.dk!small.news.tele.dk!193.251.151.101!opentransit.net!wanadoo.fr!teaser.fr!noos!not-for-mailShow Full Headers
Complete Article Headers
X-Google-Language: FRENCH,ASCII X-Google-Thread: 114f60,1a08735d72ba69eb,start X-Google-Attributes: gid114f60,public X-Google-ArrivalTime: 2001-09-16 09:40:45 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!newsfeed.google.com!newsfeed.stanford.edu!news.tele.dk!small.news.tele.dk!193.251.151.101!opentransit.net!wanadoo.fr!teaser.fr!noos!not-for-mail From: "Metcalfe" <metcalfe@noos.fr> Newsgroups: fr.comp.text.xml Subject: Parcours du DOM c�t� serveur... Date: Sun, 16 Sep 2001 18:42:49 +0200 Organization: Service Usenet NoosNet Lines: 108 Message-ID: <9o2km9$4ii$1@neon.noos.net> NNTP-Posting-Host: 195.132.252.17 X-Trace: neon.noos.net 1000658442 4690 195.132.252.17 (16 Sep 2001 16:40:42 GMT) X-Complaints-To: abuse@noos.fr NNTP-Posting-Date: Sun, 16 Sep 2001 16:40:42 +0000 (UTC) X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2600.0000 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000