Les interfaces du modèle d'objets de document XML, possèdent chacune certaines caractèristiques propres à elles-mêmes et extractibles par l'intermédiaire de propriétés adéquates.
Tout d'abord, le nom de l'objet en cours peut être récupéré par l'intermédiaire de la propriété nodeName applicable à tous les noeuds et plus spécifiquement pour les éléments tagName.
Nom_Noeud = Objet.nodeName Nom_Noeud = Objet_Element.tagName
Les propriétés nodetype et nodeTypeString retournent le type du noeud en cours respectivement sous forme d'un nombre entier et d'une chaîne de caractères.
Type_Valeur = Objet_Noeud.nodeType Type_Chaine = Objet_Noeud.nodeTypeString
Ce genre de fonctionnalités permet de construire des programmes conditionnels en fonction du noeud rencontré. Par exemple, un noeud textuel ne peut contenir d'autres noeuds, donc dans le cadre du parcours automatique d'une arborescence, il serait inutile de tester la présence d'enfants. De même, la détection d'un noeud précis, comme une instruction de traitement peut se faire par l'intermédiaire d'une condition If comprise dans une boucle.
Les types de noeudsFor Each Objet_Noeud In Liste_Noeuds Dim Tampon If Objet_Noeud.nodeType = 7 Then Tampon = Tampon & Objet_Noeud.value End If Next
Type (num - chaîne) | Description |
---|---|
NODE_ELEMENT (1 - element) |
Noeud élément. |
NODE_ATTRIBUTE (2 - attribute) |
Noeud attribut. |
NODE_TEXT (3 - text) |
Noeud textuel. |
NODE_CDATA_SECTION (4 - cdatasection) |
Noeud section CDATA. |
NODE_ENTITY_REFERENCE (5 - entityreference) |
Noeud référence d'entité. |
NODE_ENTITY (6 - entity) |
Noeud entité. |
(7 - processinginstruction) |
Noeud instruction de traîtement. |
NODE_COMMENT (8 - comment) |
Noeud commentaire. |
NODE_DOCUMENT (9 - document) |
Noeud racine. |
NODE_DOCUMENT_TYPE (10 - documenttype) |
Noeud de définiton de type de document. |
NODE_DOCUMENT_FRAGMENT (11 - documentfragment) |
Noeud fragment de document. |
NODE_NOTATION (12 - notation) |
Noeud notation. |
Par ailleurs, La méthode de noeuds hasChildNodes détermine si l'objet en cours contient une descendance.
True | False = Objet.hasChildNodes
La propriété length renvoie le nombre de noeuds à l'intérieur d'une collection.
Nombre_Items = Collection_Objets.length
Ces deux dernières propriétés peuvent servir à construire une structure conditionnelle déterminant si le'objet en cours possède des noeuds enfants ainsi que leur nombre.
If Objet.hasChildNodes Then For i = 0 To Objet.ChildNodes.length - 1 Set Noeud = Objet.ChildNodes.item(i) Response.write "<h2>Noeuds Enfants</h2>" & "Nom : " & Noeud.nodeName _ & "Valeur : " & Noeud.value _ & "Type : " & Noeud.nodeTypeString Next Else Response.write "Nom : " & Objet.nodeName _ & "Valeur : " & Objet.value _ & "Type : " & Objet.nodeTypeString End If
La propriété value retourne la valeur contenue au sein du noeud courant.
Valeur = Objet_Noeud.value
la propriété nodeTypedValue contient la valeur du noeud courant exprimée dans un type de donnée précisé en l'occurrence par la propriété dataType.
Objet_Noeud.dataType = Type Valeur = Objet_Noeud.nodeTypedValue
La méthode getAttribute extrait une valeur d'attribut par l'intermédiaire de son nom.
Valeur = Objet_Element.getAttribute(Nom)
Plusieurs méthodes ou propriété existent dans le DOM XML afin de récupérer des chaînes de caractères sur des noeuds.
Lorsque la propriété text est utilisée pour récupérer le contenu textuel d'un noeud, le résultat comprend non seulement la chaîne de caractères dans le noeud courant mais également celles dans les noeuds descendants.
<?xml version="1.0"?> <racine attribut="valeur racine"> Texte libre <element attribut_2="valeur attribut_2"> Valeur de l'élément </element> <(CDATA[Texte CDATA]]> <element_2> Valeur du deuxième élément </element_2> </racine> Response.Write Objet_Document.text ' Retourne Texte libre Valeur de l'élément Texte CDATA Valeur du deuxième élément
En définitive, seules les valeurs textuelles des éléments et des sections CDATA sont prises en compte, toutes les autres sont ignorées, comme les attributs, les commentaires et les instructions de traitement.
La propriété data récupère les données textuelles des noeuds CharacterData, Comment, Text ou ProcessingInstruction.
Chaine_Caracteres = Objet_Texte.data
La méthode splitText découpe un noeud textuel en deux à la position indiquée et insère le nouveau frère immédiatement après le noeud amputé.
Set Nouveau_Noeud = Noeud_Texte.splitText(Position)
La méthode subStringData récupére un intervalle de la valeur de chaîne de caractères d'un noeud textuel. La sous-chaîne est extraite à partir d'une position et jusqu'à un nombre indiqué.
Texte = Noeud_Texte.substringData(Position, Nombre)
La propriété length appliquée à un noeud textuel retourne le nombre total de caractères.
Exemple [voir]Nombre_Caractères = Objet_Texte.length
<html><body> <% Dim Objet_Document Dim racine, Objet_CDATA, Noeud_Frere Set Objet_Document = Server.CreateObject("MSXML2.DOMDocument") fichier = Server.MapPath("livre.xml") Objet_Document.async = false Objet_Document.load fichier Set racine = Objet_Document.documentElement Response.Write "<h1>La collection comprend " & racine.childNodes.length _ & " livres.</h1><hr>" affichage = Visualise_Noeud(Objet_Document, 0) & "<hr>" _ & "<h2>Le document a été modifié</h2>" & ajout() Function Visualise_Noeud(Objet_Noeud, nb_espaces) Dim resultat, i, nombre, nb_noeuds, Objet_Node resultat = "" For i = 1 To nb_espaces resultat = resultat & " " Next resultat = resultat & "<b style='color: blue; font-weight: bold'>" _ & Objet_Noeud.nodeName _ & "</b>(" & Objet_Noeud.nodeTypeString & ") : " _ & Objet_Noeud.nodeValue If Objet_Noeud.nodeType = 1 Then If Objet_Noeud.attributes.Length Then For Each Attribut In Objet_Noeud.attributes resultat = resultat & "[ <b>" & Attribut.nodeName _ & "</b>(" & Attribut.nodeTypeString & ") : " _ & Attribut.nodeValue & " ]<br>" Next Else resultat = resultat & "<br>" End If Else resultat = resultat & "<br>" End If nb_noeuds = Objet_Noeud.childNodes.length For nombre = 0 To nb_noeuds - 1 Set Objet_Node = Objet_Noeud.childNodes(nombre) resultat = resultat & Visualise_Noeud(Objet_Node, nb_espaces + 2) Next Visualise_Noeud = resultat End Function Function ajout() Set Objet_Node = Objet_Document.selectSingleNode _ ("//livre[nom = ""ASP, ADO, and XML Complete""]") Set Objet_CDATA = Objet_Document.createCDATASection(" " _ & "<p>Un livre de <b>Kurt Gagle</b>," _ & " auteur également de...</p>") Objet_Node.insertBefore Objet_CDATA, Objet_Node.firstChild Set Noeud_frere = Objet_Node.childNodes.item(1) modification = modification & "<u>La section CDATA suivante a " _ & "été ajoutée avant le noeud <b>" _ & Noeud_Frere.NodeName & " (" & Noeud_Frere.text _ & ")</b> :</u>" & Objet_CDATA.text Set Objet_Node = Nothing Set Noeud_Frere = Nothing Set Objet_Node = Objet_Document.selectSingleNode _ ("//livre[nom = ""XSLT Programmer's reference""]") Set Nouvel_Objet_CDATA = Objet_CDATA.cloneNode(true) Nouvel_Objet_CDATA.replaceData 19, 10, "Michael Kay" Nouvel_Objet_CDATA.replaceData 43, 12, "de nombreux ouvrages" Set Noeud_frere = Objet_Node.childNodes.item(1) Objet_Node.insertBefore Nouvel_Objet_CDATA, Objet_Node.firstChild Set Noeud_frere = Objet_Node.childNodes.item(1) modification = modification & "<u>La section CDATA suivante a " _ & "été ajoutée avant le noeud <b>" _ & Noeud_Frere.NodeName & " (" & Noeud_Frere.text _ & ")</b> :</u>" & Nouvel_Objet_CDATA.text Set Objet_Node = Nothing Set Noeud_Frere = Nothing Set oLivre4 = Objet_Document.selectSingleNode("//livre[3]/nom") Set Objet_Node = Objet_Document.selectSingleNode _ ("//livre[nom = ""Mastering Active Server Pages 3""]") Set Nouvel_Objet_CDATA = Objet_CDATA.cloneNode(true) Nouvel_Objet_CDATA.replaceData 19, 10, "Russell Jones" Nouvel_Objet_CDATA.replaceData 45, Nouvel_Objet_CDATA.length, _ "du livre " & oLivre4.text & "." Set Noeud_frere = Objet_Node.childNodes.item(1) Objet_Node.insertBefore Nouvel_Objet_CDATA, Objet_Node.firstChild Set Noeud_frere = Objet_Node.childNodes.item(1) modification = modification & "<u>La section CDATA suivante a " _ & "été ajoutée avant le noeud <b>" _ & Noeud_Frere.NodeName & " (" & Noeud_Frere.text _ & ")</b> :</u>" & Nouvel_Objet_CDATA.text ajout = modification End Function Objet_Document.save(Server.MapPath("livre.xml")) affichage2 = Visualise_Noeud(Objet_Document, 0) Set Objet_Node = Nothing Set Noeud_Frere = Nothing Set Objet_Document = Nothing %> <div><%= affichage %></div> <hr> <div><%= affichage2 %></div> </body></html> |