Le modèle d'objet de document contient des interfaces et de nombreuses méthodes ou propriétés permettant de récupérer des informations ciblées dans un document XML.
Chaque noeud d'un document XML est représenté par un objet spécifique. Néanmoins, le noeud générique Node peut contenir n'importe lequel d'entre eux.
Les ObjetsObjet | Description |
---|---|
Document | représente le document XML complet susceptible de contenir tous les autres noeuds. |
Node | correspond à n'importe lequel des noeuds dans l'arborescence d'un document XML, y compris ce-dernier <Noeud>...</Noeud>, noeud="valeur", .... |
Attribute | représente un noeud attribut ayant pour valeur un noeud texte, <Element Attribut="Valeur"/>. |
CDATASection | représente une section CDATA, <![CDATA[Texte...]]>. |
CharacterData | représente un noeud CDATASection, Comment ou Text. |
Comment | représente un commentaire <!-- Commentaire -->. |
DocumentType | représente la définition de type de document ne pouvant contenir que des noeuds entités ou notations, <!DOCTYPE...[...]> |
Element | représente un noeud élément ayant éventuellement pour valeur un noeud texte, <Element> [Valeur] </Element>. |
Entity | représente une entité dans une DTD, <!ENTITY...>. |
EntityReference | représente une référence d'entité contenu dans un noeud texte, &Référence_Entité;. |
Notation | représente une notation dans une DTD, <!NOTATION...>. |
ProcessingInstruction | représente une instruction de traîtement <?Instruction Valeur?>. |
SchemaCache | représente un espace de noms et un schéma dans le document. |
Text | représente un noeud ou un ensemble de noeuds textuel. Ce noeud est présent dans les attributs et les éléments. |
La méthode nodeFromID récupère un noeud par l'intermédiaire de son identificateur.
Objet_Noeud = Objet_Document.nodeFromID(Identificateur)
La méthode selectSingleNode retourne le noeud sélectionné à l'aide d'une expression XSL ou XPath.
Objet_Noeud = Objet.selectSingleNode(Expression)
La méthode getAttributeNode renvoie un noeud attribut par l'intermédiaire de son nom.
Objet_Attribut = Objet_Element.getAttributeNode(Nom)
Par ailleurs, des collections permettent de regrouper plusieurs objets résultant d'une partie de l'arborescence XML d'un document. Ces collections peuvent être obtenues à l'aide de propriétés ou de méthodes appliquées à des objets susceptibles de contenir des noeuds, à l'image des éléments contenant des attributs et d'autres éléments.
Les CollectionsCollection | Description |
---|---|
NamedNodeMap | représente une collection d'attributs, d'entités ou de notations. |
NodeList | représente une liste de noeuds. |
DocumentFragment | représente un fragment de document. |
SchemaCollection | représente les espaces de noms et les schémas dans le document. |
Selection | représente un ou plusieurs noeuds sélectionnés par une expression XPath. |
La méthode selectNodes retourne une collection de noeuds résultant d'une expression XSL ou XPath.
Set Collection_Noeuds = Objet.selectNodes(Expression)
La méthode getElementsByTagName renvoie une collection d'éléments correspondant à un nom précis. Cette méthode est essentiellement applicable à un document et aux éléments.
Set Collection_Elements = Objet.getElementByTagNames(Nom)
La propriété attributes retourne une collection d'attributs provenant d'un noeud élément en cours.
Set Liste_Attributs = Objet_Element.attributes
La collection NodeList contient une liste de noeuds dépendant du noeud en cours sans distinction de type. Ainsi, la liste de noeuds de l'objet Document peut être composé d'une instruction de traîtement, d'une déclaration de type de document et d'un élément racine.
La méthode ChildNodes de l'objet Document permet d'extraire une liste de noeuds enfants.
Set Liste_Noeuds = Objet_Document.childNodes
Il est possible de parcourir une liste de noeuds par l'intermédiaire d'une boucle For...To...Next et des méthodes length et item.
For i = 0 To Liste_Noeuds.length - 1 Response.Write Liste_Noeuds.item(i).value Next
L'objet Node peut être extrait par la méthode item à l'intérieur d'une collection de noeuds ou d'un objet selection.
Set Objet_Noeud = Liste_Noeuds.item(Index) Set Objet_Noeud = Objet_selection.item(Index)
Plus spécifiquement, la méthode getNamedItem permet d'accéder à un noeud attribut par l'intermédiaire de son nom.
Set Objet_Attribut = Liste_Attributs.getNamedItem(Nom)
La méthode nextNode permet d'atteindre le prochain noeud dans la collection nodeList ou dans un objet Selection. La méthode peekNode est équivalente à celle précité hormis que la position de ligne n'est pas avancée.
Set Objet_Noeud = Liste_Noeuds.nextNode Set Objet_Noeud = objet_Selection.nextNode Set Objet_Noeud = Objet_selection.peekNode
Il est possible de récupérer tous les noeuds d'une collection en utilisant une boucle For Each... appliquée à une liste de noeuds NodeList.
For Each Objet_Noeuds In Liste_Noeuds Response.Write Objet_Noeuds.value Next
L'objet Document dispose de propriétés pouvant retourner directement le premier (firstChild) ou le dernier (lastChild) noeud enfant.
Set Premier_Noeud = Objet_Document.FirstChild Set Dernier_Noeud = Objet_Document.lastChild
Les noeuds possédent également des propriétés dont la fonction est d'accéder à leur frère direct en amont (previousSibling) ou en aval (nextSibling).
Set Frere_Precedent = Objet_Noeud.previousSibling Set Frere_Suivant = Objet_Noeud.nextSibling
D'autres noeuds précis tels que le noeud racine (documentElement), le type de document (docType) ou le contenu textuel (text) sont également directement récupérable à partir de l'objet Document.
Set Noeud_Racine = Objet_Document.documentElement Set Noeud_DTD = Objet_Document.docType Set Contenu_Texte = Objet_Document.text
A partir d'un noeud enfant quelconque dans l'arborescence d'un document XML, la propriété parentNode permet de remonter à l'ascendance de l'interface et la propriété ownerDocument, au noeud document dont il dépend.
Exemple [voir]Set Noeud_Parent = Objet_Noeud.parentNode Set Objet_Document = Objet_Noeud.ownerDocument
<% Dim Objet_Document Dim Objet_NodeList Dim noeud, resultat Dim oEditeur, oCommentaire Set Objet_Document = Server.CreateObject("MSXML2.DOMDocument") Objet_Document.async = false fichier = Server.MapPath("logitheque.xml") Objet_Document.load fichier If Objet_Document.parseError.errorCode <> 0 Then Response.Write "Une erreur s'est produite " _ & "lors de l'analyse du fichier !" Else Set Objet_NodeList = Objet_Document.getElementsByTagName("logiciel") For i = 0 To Objet_NodeList.length - 1 Step 2 set noeud = Objet_NodeList.item(i) set oEditeur = noeud.selectSingleNode("editeur") set oCommentaire = noeud.selectSingleNode("commentaire") resultat = resultat & "<tr><td>" _ & noeud.attributes.item(0).nodeValue _ & "</td><td> : <b style='color:blue'>" _ & noeud.firstchild.text & "</b></td></td><td>" _ & oEditeur.text & "</td></td><td>" _ & oCommentaire.text & "</td></tr>" Next Response.Write "<h3>La liste comporte " & Objet_NodeList.length _ & " noeuds.</h3><hr><table><tr><th>Code</th>" _ & "<th>Nom</th></tr>" & resultat & "</table>" End If %> |