L'Altruiste : Le guide des langages Web

Le DOM XML

Sommaire

1 / Introduction

Le Modèle d'Objet de Document (DOM) est une interface de programmation d'applications (API : Applications Programming Interface) qui définit la structure logique, les modes de gestion et d'accès des documents XML, HTML (Hyper-Text Markup Language) et CSS (Cascading StyleSheet). permettant, donc, un accès dynamique à des documents et la mise à jour de leur contenu, de leur structure et de leur style par l'intermédiaire de programmes ou de scripts.

Les langages de programmation tels que Java, C++ ou ASP (Active Server Pages) s'appuient sur le DOM afin de traiter des documents XML. Développé par le W3C (World Wide Web Consortium), le modèle d'objet est universel, indépendant d'un quelconque langage ou plateforme. Seule l'implémentation, l'application capable d'exécuter des opérations à partir du DOM, est à la charge d'un fournisseur tel que Sun Microsystems, Microsoft, ou autre.

Les documents XML sont hiérarchisés selon une structure arborescente, avec un élément racine auquel sont reliés un ou plusieurs éléments enfants dont eux-mêmes peuvent être les parents d'autres enfants, et cela jusqu'à un niveau quelconque.

Les éléments également appelés noeuds possèdent chacun un type défini dans le DOM, ainsi l'élément racine serait le noeud Document, le commentaire, un noeud Comment ou encore l'attribut, un noeud Attribute, etc..

Un élément peut être composé d'un ou plusieurs noeuds, comme d'autres éléments, des instructions de traitement, ou encore du texte, mais aussi des attributs. Le DOM est un modèle complet représentant un document XML dans ses moindres détails, chaque élément de ce document possèdant une représentation spécifique dans le modèle d'objet.

Le modèle d'objet spécifié par le W3C indique douze types de noeuds différents.

Le modèle d'objet de document fournit tout une panoplie d'outils destinés à construire ou déconstruire un document XML. Pour cela, le DOM met à disposition des interfaces, des méthodes et des propriétés permettant de gérer l'ensemble des composants présents dans un document XML.

Le DOM spécifie diverses méthodes et propriétés permettant notamment, de créer (createNode,...), modifier (replaceChild,...), supprimer (remove,...) ou d'extraire des données (get,...) de n'importe quel élément ou contenu d'un document XML.

De même, le DOM définit les types de relation entre chaque noeud, et des directions de déplacement dans une arborescence XML. Les propriétés parentNode, childNodes, firstChild, lastChild, previousSibling et nextSibling permettent de retourner respectivement le père, les enfants, le premier enfant, le dernier enfant, le frère précédent et le frère suivant du noeud courant.

Le modèle d'objet de document offre donc au programmeur les moyens de traiter un document XML dans sa totalité. Néanmoins, s'il définit certaines règles structurelles, il ne peut se substituer aux spécifications XML régissant la syntaxe et la structure fondamentale d'un document XML.

2 / Les objets

Le DOM (Document Object Model) propose plusieurs objets représentant chaque composant de l'arborescence d'un document structuré et hiérarchisé.

Ces objets contiennent plusieurs méthodes et propriétés permettant de gérer l'ensemble d'un document XML.

Ces objets appelés interfaces, proviennent des spécifications du World Wide Web Consortium.

Les objets présentés ci-dessous sont pour la plupart communs au DOM XML de Microsoft et à celui de Java de Sun, néanmoins certains ne sont compatibles que pour l'un ou l'autre des éditeurs.

2.1 / Les interfaces

Les interfaces spécifiées par le W3C (World Wide Web Consortium) représentent chacun une partie distincte de l'arborescence d'un document XML comme des noeuds d'éléments, d'attributs, de texte, ou des collections de noeuds ou encore des fragments de document, etc..

Les interfaces
Attr Entity
CDATASection EntityReference
CharacterData NamedNodeMap
Comment Node
Document NodeList
DocumentFragment Notation
DocumentType ProcessingInstruction
DOMImplementation Text
Element  
Les interfaces du DOM
Interface Description
Propriétés
Méthodes
Attr représente un attribut, défini dans la Définition de Type de Document, d'un objet Element.
name, ownerElement, specified, value attributes, childNodes, firstChild, lastChild, localName, namespaceURI, nextSibling, nodeName, nodeType, nodeValue, ownerDocument, parentNode, prefix, previousSibling
appendChild, cloneNode, hasAttributes, hasChildNodes, insertBefore, isSupported, normalize, removeChild, replaceChild
CDATASection représente une section de données textuelles (Character DATA Section).
data, length, attributes, childNodes, firstChild, lastChild, localName, namespaceURI, nextSibling, nodeName, nodeType, nodeValue, ownerDocument, parentNode, prefix, previousSibling
appendData, deleteData, insertData, replaceData, substringData, appendChild, cloneNode, hasAttributes, hasChildNodes, insertBefore, isSupported, normalize, removeChild, replaceChild, splitText
CharacterData est une extension de l'interface Node qui permet d'accèder aux données textuelles dans le modèle d'objet.
data, length attributes, childNodes, firstChild, lastChild, localName, namespaceURI, nextSibling, nodeName, nodeType, nodeValue, ownerDocument, parentNode, prefix, previousSibling
appendData, deleteData, insertData, replaceData, substringData appendChild, cloneNode, hasAttributes, hasChildNodes, insertBefore, isSupported, normalize, removeChild, replaceChild
Comment représente un commentaire dans un document XML ou HTML : <!-- Commentaire -->.
data, length, attributes, childNodes, firstChild, lastChild, localName, namespaceURI, nextSibling, nodeName, nodeType, nodeValue, ownerDocument, parentNode, prefix, previousSibling
appendData, deleteData, insertData, replaceData, substringData, appendChild, cloneNode, hasAttributes, hasChildNodes, insertBefore, isSupported, normalize, removeChild, replaceChild
Document représente la totalité d'un document XML ou HTML. En fait il est la racine (root) de l'arborescence d'un document.
doctype, documentElement, implementation attributes, childNodes, firstChild, lastChild, localName, namespaceURI, nextSibling, nodeName, nodeType, nodeValue, ownerDocument, parentNode, prefix, previousSibling
createAttribute, createAttributeNS, createCDATASection, createComment, createDocumentFragment, createElement, createElementNS, createEntityReference, createProcessingInstruction, createTextNode, getElementById, getElementsByTagName, getElementsByTagNameNS, importNode appendChild, cloneNode, hasAttributes, hasChildNodes, insertBefore, isSupported, normalize, removeChild, replaceChild
DocumentFragment représente une partie de l'arborescence d'un document. Ce fragment pouvant ne pas être bien formé, est utilisé généralement pour des opérations d'insertion.
attributes, childNodes, firstChild, lastChild, localName, namespaceURI, nextSibling, nodeName, nodeType, nodeValue, ownerDocument, parentNode, prefix, previousSibling
appendChild, cloneNode, hasAttributes, hasChildNodes, insertBefore, isSupported, normalize, removeChild, replaceChild
DocumentType représente la déclaration de type de document indiqué par la balise <DOCTYPE>.
entities, internalSubset, name, notations, publicId, systemId attributes, childNodes, firstChild, lastChild, localName, namespaceURI, nextSibling, nodeName, nodeType, nodeValue, ownerDocument, parentNode, prefix, previousSibling
appendChild, cloneNode, hasAttributes, hasChildNodes, insertBefore, isSupported, normalize, removeChild, replaceChild
DOMImplementation fournit des méthodes qui sont indépendantes de n'importe quelles instances particulières du Modèle d'Objet du Document
Aucune
createDocument, createDocumentType, hasFeature
Element représente tous les noeuds communs, à l'exception des noeuds textuelles, dans les documents XML.
tagName attributes, childNodes, firstChild, lastChild, localName, namespaceURI, nextSibling, nodeName, nodeType, nodeValue, ownerDocument, parentNode, prefix, previousSibling
getAttribute, getAttributeNS, getAttributeNode, getAttributeNodeNS, getElementsByTagName, getElementsByTagNameNS, hasAttribute, hasAttributeNS, removeAttribute, removeAttributeNS, removeAttributeNode, setAttribute, setAttributeNS, setAttributeNode, setAttributeNodeNS appendChild, cloneNode, hasAttributes, hasChildNodes, insertBefore, isSupported, normalize, removeChild, replaceChild
Entity rerpésente une entité analysée ou non-analysée dans un document XML.
notationName, publicId, systemId attributes, childNodes, firstChild, lastChild, localName, namespaceURI, nextSibling, nodeName, nodeType, nodeValue, ownerDocument, parentNode, prefix, previousSibling
appendChild, cloneNode, hasAttributes, hasChildNodes, insertBefore, isSupported, normalize, removeChild, replaceChild
EntityReference contient le nom de l'entité <!ENTITY Nom SYSTEM Valeur>.
attributes, childNodes, firstChild, lastChild, localName, namespaceURI, nextSibling, nodeName, nodeType, nodeValue, ownerDocument, parentNode, prefix, previousSibling
appendChild, cloneNode, hasAttributes, hasChildNodes, insertBefore, isSupported, normalize, removeChild, replaceChild
NamedNodeMap représente des collections de noeuds qui peuvent être accèdées par un nom.
length
getNamedItem, getNamedItemNS, item, removeNamedItem, removeNamedItemNS, setNamedItem, setNamedItemNS
Node représente un noeud unique dans l'arborescence d'un document XML.
attributes, childNodes, firstChild, lastChild, localName, namespaceURI, nextSibling, nodeName, nodeType, nodeValue, ownerDocument, parentNode, prefix, previousSibling
appendChild, cloneNode, hasAttributes, hasChildNodes, insertBefore, isSupported, normalize, removeChild, replaceChild
NodeList représente une collection de noeuds ordonnés.
length
item
Notation représente une notation <!NOTATION> déclarée dans la DTD.
publicId, systemId attributes, childNodes, firstChild, lastChild, localName, namespaceURI, nextSibling, nodeName, nodeType, nodeValue, ownerDocument, parentNode, prefix, previousSibling
appendChild, cloneNode, hasAttributes, hasChildNodes, insertBefore, isSupported, normalize, removeChild, replaceChild
ProcessingInstruction représente une instruction de traîtement <?Nom_Instruction Contenu?>.
data, target attributes, childNodes, firstChild, lastChild, localName, namespaceURI, nextSibling, nodeName, nodeType, nodeValue, ownerDocument, parentNode, prefix, previousSibling
appendChild, cloneNode, hasAttributes, hasChildNodes, insertBefore, isSupported, normalize, removeChild, replaceChild
Text représente le contenu textuel d'un attribut ou d'un élément.
data, length, attributes, childNodes, firstChild, lastChild, localName, namespaceURI, nextSibling, nodeName, nodeType, nodeValue, ownerDocument, parentNode, prefix, previousSibling
splitText appendData, deleteData, insertData, replaceData, substringData, appendChild, cloneNode, hasAttributes, hasChildNodes, insertBefore, isSupported, normalize, removeChild, replaceChild

2.1.1 / L'interface DOMException

Les opérations DOM peuvent provoquer certaines exceptions dans des circonstances exceptionnelles.

DOMException = Code_Exception

Une exception est lancée lorsqu'une opération est impossible à exécuter à cause de données perdues ou d'une instabilité de l'implémentation ou encore si un argument de valeur nulle est passé.

Tous les langages ne supportent pas cette interface, mais par des méthodes spécifiques retournent des codes d'exception similaires à ceux renvoyés par l'interface DOMException. Microsoft utilise l'objet IXMLDOMParseError.

Les Codes d'exception
ConstanteValeur
Description
INDEX_SIZE_ERR 1
est lancé si un index ou une taille est négative ou plus grande que la valeur permise.
DOMSTRING_SIZE_ERR 2
est lancé si l'intervalle de texte ne convient pas au type des chaînes de caractères DOM, soit une séquence d'unité de 16 bits.
HIERARCHY_REQUEST_ERR 3
est lancé si n'importe quel noeud est inséré quelque part où il ne convient pas.
WRONG_DOCUMENT_ERR 4
est lancé si un noeud est utilisé dans un document différent de celui qui le crée.
INVALID_CHARACTER_ERR 5
est lancé si un caractère illégal ou invalide est spécifié notamment dans un nom.
NO_DATA_ALLOWED_ERR 6
est lancé si les données sont spécifiées pour un noeud qui ne supporte par de données.
NO_MODIFICATION_ALLOWED_ERR 7
est lancé si une tentative est faite pour modifier un objet où les modifications nes sont pas permises.
NOT_FOUND_ERR 8
est lancé si une tentative est faite pour référencer un noeud dans un contexte où il n'existe pas.
NOT_SUPPORTED_ERR 9
est lancé si l'implémentation ne supporte pas le type requis de l'objet ou de l'opération.
INUSE_ATTRIBUTE_ERR 10
est lancé si une tentative est faite pour ajouter un attribut qui est déjà utilisé quelque part.
INVALID_STATE_ERR 11
est lancé si une tentative est faite pour utiliser un objet qui n'est pas utilisable.
SYNTAX_ERR 12
est lancé si une chaîne de caractères illégale ou invalide est spécifiée.
INVALID_MODIFICATION_ERR 13
est lancé si une tentative est faite pour modifier le type de l'objet sous-jacent.
NAMESPACE_ERR 14
est lancé si une tentative est faite pour créer ou modifier un objet d'une manière incorrecte par rapport aux espaces de noms.
INVALID_ACCESS_ERR 15
est lancé si un paramètre ou une opération n'est pas supporté par l'objet sous-jacent.

2.1.2 / Les propriétés

Les propriétés permettent de retourner et pour certaines d'affecter, des valeurs ou des objets DOM.

Noeud_DOM.Propriété = Valeur | Objet
Propriété
Description
Node.attributes = NamedNodeMap
retourne les attributs du noeud s'il s'agît d'un élément sinon il retourne null.
Node.childNodes = NodeList
retourne tous les enfants du noeud, s'il n'y en a pas il retourne null.
CharacterData.data = Chaîne_de_caractères
retourne ou affecte les données textuelles du noeud qui implémente cette interface.
ProcessingInstruction.data = Chaîne_de_caractères
retourne ou affecte le contenu de l'instruction de traîtement.
Document.doctype = DocumentType
retourne la déclaration de type de document <!DOCTYPE...> associée au document.
Document.documentElement = Element
retpourne l'élément racine du document.
DocumentType.entities = NamedNodeMap
retourne un objet NamedNodeMap contenant les entités générales externes et internes déclarées dans a DTD.
Node.firstChild = Node
retourne le premier enfant du noeud.
Document.implementation = DOMImplementation
retourne l'objet DOMImplementation qui manipule ce document.
DocumentType.internalSubset = Chaîne_de_caractères
retourne le sous-ensemble interne sous forme de chaîne de caractères.
Node.lastChild = Node
retourne le dernier enfant du noeud.
CharacterData.length = Longueur
retourne le nombre d'unité de 16 bits qui sont disponibles par l'intermédiaire de la propriété data et de la méthode substringData().
NamedNodeMap.length = Nombre
retourne le nombre de noeuds dans l'objet NamedNodeMap.
NodeList.length = Nombre
retourne le nombre de noeuds dans la liste.
Node.localName = Chaîne_de_caractères
retourne la partie locale du nom qualifié du noeud.
Attr.name = Chaîne_de_caractères
retourne le nom de l'attribut.
DocumentType.name = Chaîne_de_caractères
retourne le nom de la DTD, soit <DOCTYPE Nom...>.
Node.namespaceURI = Chaîne_de_caractères
retourne l'adresse URI de l'espace de noms du noeud.
Node.nextSibling = Node
retourne le noeud suivant immédiatement le noeud courant.
Node.nodeName = Chaîne_de_caractères
retourne le nom du noeud.
Node.nodeType = Code
retourne un code représentant le type de l'objet sous-jacent.
Node.nodeValue = Chaîne_de_caractères
retourne ou affecte la valeur du noeud.
Entity.notationName = Chaîne_de_caractères
retourne le nom de la notation pour l'entité non-analysée et Null pour les entités analysées.
DocumentType.notations = NamedNodeMap
retourne un objet NamedNodeMap contenant les notations déclarées dans la DTD.
Node.ownerDocument = Document
retourne l'objet Document associé au noeud.
Attr.ownerElement = Element
retourne le noeud élément auquel est lié l'attribut.
Node.parentNode = Node
retourne le parent du noeud à condition que ce-dernier puisse en avoir un.
Node.prefix = Chaîne_de_caractères
retourne le préfixe de l'espace de noms du noeud.
Node.previousSibling = Node
retourne le nom précédent immédiatement le noeud courant.
DocumentType.publicId = Chaîne_de_caractères
retourne l'identificateur public du sous-ensemble externe.
Entity.publicId = Chaîne_de_caractères
retourne l'identificateur public associé à l'entité.
Notation.publicId = Chaîne_de_caractères
retourne l'identificateur public de la notation.
Attr.specified = True | False
Si l'attribut possède une valeur assignée dans le document specified est égal à True et la valeur est la valeur assignée.
Si l'attribut ne possède pas de valeur assignée dans le document et a une valeur par défaut dans la DTD, alors specified est égal à False et la valeur est la valeur par défaut dans la DTD.
Si l'attribut ne possède pas de valeur assignée dans le document et a une valeur #IMPLIED dans la DTD, alors l'attribut n'apparaît pas dans le modèle de structure du document.
Si la propriété ownerElement est nulle, alors specified est True.
DocumentType.systemId = Chaîne_de_caractères
retourne l'identificateur système du sous-ensemble externe.
Entity.systemId = Chaîne_de_caractères
retourne l'identificateur système associé à l'entité.
Notation.systemId = Chaîne_de_caractères
retourne l'identificateur système associé à la notation.
Element.tagName = Chaîne_de_caractères
retourne le nom de l'élément.
ProcessingInstruction.target = Chaîne_de_caractères
retourne la cible de l'instruction de traîtement
Attr.value = Chaîne_de_caractères
retourne ou affecte la valeur de l'attribut sous forme de chaîne de caractères ou crée un noeud Text avec un contenu textuel non-analysé.

Note : Pour des raisons de commodités, aucune différence n'a été faite dans la syntaxe quant à l'affectation ou la récupération de valeur.

2.1.3 / Les méthodes

Les méthodes permettent d'accomplir diverses opérations sur l'arborescence d'un document XML.

Noeud.Méthode(Argument) = Résultat
Les Méthodes
Méthode
Description
Noeud.appendChild(Nouveau_Noeud) = Noeud
ajoute un nouveau noeud ou un fragment de document à la fin de la liste des enfants du noeud.
CharacterData.appendData(Chaîne_de_caractères)
ajoute la chaîne de caractères à la fin des données textuelles du noeud.
Noeud.cloneNode(Bool_Profondeur) = Noeud
retourne si l'argument Profondeur est false, un double du noeud lui même et éventuellement de ses attributs si c'est un élément. Si la valeur est true, un clonage récursif du sous-arbre sous le noeud est pratiqué, en clair le noeud, ses attributs et l'ensemble de sa descendance sont dupliqués.
Document.createAttribute(Nom) = Attr
crée un attribut avec le nom spécifié.
Document.createAttributeNS(URI_Espace_Noms, Nom_Qualifié) = Attr
retourne un objet attribut avec un espace de noms et un nom spécifiés en argument.
Document.createCDATASection(Texte) = CDATASection
retourne une section CDATA avec le contenu textuel spécifié.
Document.createComment(Texte) = Comment
retourne un noeud commentaire avec le contenu textuel spécifié.
DOMImplementation.createDocument(URI_Espace_Noms,
Nom_Qualifié, Type_Document)
= Document
retourne un nouvel objet Document avec un URI espace de noms, un nom qualifié et éventuellement la déclaration de type de document à lui associer.
Document.createDocumentFragment() = DocumentFragment
retourne un fragment de document.
DOMImplementation.createDocumentType(Nom_Qualifié,
ID_Public, ID_Système)
= DocumentType
retourne un nouvel objet DocumentType avec un nom et les identificateurs public et système spécifiés en argument.
Document.createElement(Nom) = Element
retourne un nouvel objet élément avec le nom spécifié.
Document.createElementNS(URI_Espace_Noms, Nom_Qualifié) = Element
retourne un nouvel objet élément avec l'adresse URI d'espaces de noms et le nom spécifié.
Document.createEntityReference(Nom) = EntityReference
retourne un nouvel objet EntityReference avec le nom indiqué.
Document.createProcessingInstruction(Cible,
Données)
= ProcessingInstruction
crée une nouvelle instruction de traîtement avec la partie cible et les données du indiquées.
Document.createTextNode(Texte) = Text
retourne un nouveau noeud Text avec le contenu textuel spécifié.
CharacterData.deleteData(Position, Nombre)
supprime un intervalle à partir d'une position et jusqu'au nombre indiqué.
Element.getAttribute(Nom) = Chaîne_de_caractères
retourne la valeur d'un attribut identifié par son nom.
Element.getAttributeNode(Nom) = Attr
retourne un noeud d'attribut identifié par son nom.
Element.getAttributeNodeNS(URI_Espace_Noms, Nom) = Attr
retourne un noeud d'attribut identifié par son adresse URI d'espace de noms et son nom.
Element.getAttributeNS(URI_Espace_Noms, Nom) = Chaîne_de_caractères
retourne la valeur d'un attribut identifié par son adresse URI d'espace de noms et son nom.
Document.getElementById(ID_Elément) = Element
retourne l'objet élément identifié par l'identificateur fourni en argument.
Document.getElementsByTagName(Nom) = ListeNoeud
retourne une liste de noeuds contenant tous les éléments répondant au nom spécifié.
Element.getElementsByTagName(Nom) = ListeNoeud
retourne une liste de noeuds contenant tous les éléments correspondant au nom spécifié.
Document.getElementsByTagNameNS(URI_Espace_Noms, Nom) = ListeNoeud
retourne une liste de noeuds contenant tous les éléments répondant à l'adresse URI et au nom indiqués en argument.
Element.getElementsByTagNameNS(URI_Espace_Noms, Nom) = ListeNoeud
retourne une liste de noeuds contenant les éléments correspondant à l'adresse URI d'espace de noms et le nom indiqués.
NamedNodeMap.getNamedItem(name) = Noeud
retourne un noeud identifié par son nom.
NamedNodeMap.getNamedItemNS(EspaceNomURI, NoLocal) = Noeud
retourne un noeud identifié par l'intermédaire de son adresse URI d'espace de noms et son nom.
Noeud.hasAttribute() = True | False
retourne True si le noeud possède des attributs, sinon False.
Element.hasAttributeNS(URI_Espace_Noms, Nom_Local) = True | False
retourne True lorsqu'un attribut, avec un nom local et une adresse URI d'espace de noms fournis, est spécifié sur l'élément ou a une valeur par défaut, sinon False.
Noeud.hasAttributes() = True | False
retourne True si le noeud a des attributs, sinon False.
Noeud.hasChildNodes() = True | False
retourne True si le noeud a des enfants, sinon False.
DOMImplementation.hasFeature(Caractéristique, Version) = True | False
teste si l'impémentation DOM exécute une caractéristique spécifique dans sa version indiquée.
Document.importNode(Noeud, Bool_Profondeur) = Noeud
importe un noeud à partir d'un autre document. Le noeud est modifié ou enlevé du document source et une copie est retournée.
Noeud.insertBefore(Nouvel_Enfant, Référence_Enfant) = Noeud
insère un nouveau noeud enfant Nouvel_Enfant avant le noeud enfant existant Référence_Enfant. Si ce-dernier est nul, alors le nouveau noeud sera inséré à la fin de la liste d'enfants.
CharacterData.insertData(Position, Texte)
insère une chaîne de caractères à la position spécifiée.
Noeud.isSupported(Caractéristique, Version) = True | False
teste si l'implémentation DOM exécute une caractéristique spécifique et que celle-ci soit supportée par le noeud.
NamedNodeMap.item(Index) = Noeud
retourne le noeud positionné à l'index spécifié.
NodeList.item(Index) = Noeud
retourne le noeud positionné à l'index spécifié.
Noeud.normalize()
combine deux ou plusieurs noeuds textuels adjacents à l'intérieur d'un noeud textuel unifié.
Element.removeAttribute(Nom)
enlève un attribut par l'intermédiaire de son nom.
Element.removeAttributeNode(URI_Espace_Noms, Nom) = Attr
enlève un attribut par son nom et l'adresse URI d'espace de noms.
Element.removeAttributeNS(Attr)
enlève l'objet atribut spécifié et le retourne.
Noeud.removeChild(Ancien_Enfant) = Noeud
enlève le noeud enfant spécifié en argument de la liste d'enfant et le retourne.
NamedNodeMap.removeNamedItem(Nom) = Noeud
enlève un noeud par son nom le retourne.
NamedNodeMap.removeNamedItemNS(URI_Espaces_Nom, Nom) = Noeud
enlève un noeud identifié par l'adresse URI d'espace de noms et son nom.
Noeud.replaceChild(Nouvel_Enfant, Ancien_Enfant) = Noeud
remplace l'ancien noeud par le nouveau noeud dans la liste d'enfants et le retourne.
CharacterData.replaceData(Position, Nombre, Chaîne_Caractères)
remplace le caractère de départ à la position spécifiée par la chaîne de caractères spécifiées.
Element.setAttribute(Nom, Valeur)
ajoute un attribut avec un nom et une valeur indiqués.
Element.setAttributeNode(Nom, Valeur) = Attr
ajoute un attribut avec le nom et la valeur spécifiés.
Element.setAttributeNodeNS(Nouvel_Attribut) = Attr
ajoute un nouvel attribut à la liste d'attributs du noeud.
Element.setAttributeNS(URI_Espace_Noms, Nom_Qualifié, Valeur)
ajoute un nouvel attribut avec un URI d'espace de noms, un nom qualifié et une valeur.
NamedNodeMap.setNamedItem(Noeud) = Noeud
ajoute un noeud utilisant sa propriété nodeName.
NamedNodeMap.setNamedItemNS(Noeud) = Noeud
ajoute un noeud utilisant ses propriétés namespaceURI et localName.
Text.splitText(Position) = Text
découpe un noeud textuel en deux, à la position pécifiée et conserve les deux comme frères dans l'arborescence du document.
CharacterData.substringData(Position, Nombre) = Chaîne_de_caractères
extrait un intervalle de données à partir d'un noeud à la position et jusqu'au nombre indiqué.

Note : Pour des raisons de commodités, la valeur retournée par une méthode est placée sur la droite alors que celle-ci est transmise en réalité vers la gauche comme ceci :

Variable = Noeud.Méthode()

2.2 / Les objets Microsoft

Les objets présentés ici proviennent des spécifications DOM propres à Microsoft et partant ne sont compatibles que sous les langages et plateformes du même éditeur.

2.2.1 / L'objet Document

L'objet Document représente la totalité d'un document HTML ou XML.

La création de l'objet DOMDocument s'effectue à partir de l'instruction suivante :

Set objet_Document = _
             Server.CreateObject("Msxml2.DOMDocument")
Set objet_Document = _
             Server.CreateObject("F6D90F11-9C73-11D3-B32E-00C04F990BB4")

La première instruction utilise un ProgID d'une version indépendante et la seconde un ClassID.

L'objet DOMDocument peut être utilisé soit en un modèle d'unités d'exécution libres ou d'unités d'exécution louées.

L'objet FreeThreadedDOMDocument est à utiliser s'il est nécessaire de le conserver à l'intérieur de la portée d'une session ou d'une application.

Le comportement des deux modèles est identique. Toutefois, le modèle de location offre de meilleures performances car l'analyseur ne nécessite pas de gérer des accès simultanés parmi les unités d'exécution. Il n'est pas possible de combiner des noeuds ou des documents qui sont créés en utilisant des modèles différents de partage d'unités d'exécution.

Set objet_Document = _
             Server.CreateObject("Msxml2.FreeThreadedDOMDocument")
Set objet_Document = _
             Server.CreateObject("F6D90F12-9C73-11D3-B32E-00C04F990BB4")

Tous les autres objets d'un document XML découlant du document comme les noeuds enfants sont créés et accédés par l'objet DOMDocument.

Cet objet contient de nombreuses méthodes et propriétés permettant notamment de créer, modifier ou gérer tous les types de noeuds d'extraitre leur contenu ou valeur, ainsi que de travailler en coordination avec les feuilles de style XSL ou XSL-Transformation.

Les Propriétés
Propriété
Description
Objet_Document.async
indique si le télechargement asychrone est permis en lecture et écriture.
Set Objet_NamedNodeMap = Objet_Document.attributes
contient la liste des attributs pour ce noeud en lecture seule.
Chaîne = Objet_Document.baseName
retourne le nom de base pour le nom qualifié avec l'espace de noms en lecture seule.
Set Objet_NodeList = Objet_Document.childNodes
contient une liste de noeuds contenant les enfants en lecture seule.
Valeur = Objet_Document.dataType
indique le type de données pour ce noeud en lecture et écriture.
Set Objet_Node = Objet_Document.definition
retourne la définition d'un noeud dans le DTD ou le schéma en lecture seule.
Set Objet_DocumentType = Objet_Document.doctype
contient le noeud de type de document qui spécifie le DTD pour ce document en lecture seule.
Set Objet_Element = Objet_Document.documentElement
contient l'élément racine du document en lecture et écriture.
Set Objet_Node = Objet_Document.firstChild
contient le premier enfant de ce noeud en lecture seule.
Set Objet_Implementation = Objet_Document.implementation
contient l'objet IXMLDOMImplementation pour ce document en lecture seule.
Set Objet_Node = Objet_Document.lastChild
retourne le dernier noeud enfant en lecture seule.
Chaîne = Objet_Document.namespaceURI
retourne l'URI (Uniform Resource Identifier) pour l'espace de noms en lecture seule.
Set Objet_Node = Objet_Document.nextSibling
contient le frère suivant de ce noeud dans la liste d'enfants des parents en lecture seule.
Chaîne = Objet_Document.nodeName
contient le nom qualifié de l'élément, l'attribut, la référence d'entité ou une chaîne de caractères fixée pour d'autres types de noeud en lecture seule.
Valeur = Objet_Document.nodeType
spécifie le type de noeud XML DOM qui détermine des valeurs valides et si le noeud peut avoir des noeuds enfants en lecture seule.
Valeur = Objet_Document.nodeTypedValue
contient la valeur de ce noeud exprimée dans son type de donnée défini en lecture et écriture.
Chaîne = Objet_Document.nodeTypeString
retourne le type de noeud dans une forme de chaîne de caractères en lecture seule.
Valeur = Objet_Document.nodeValue
contient le texte associé avec le noeud en lecture et écriture.
Set Objet_Document.ondataavailable = Gestionnaire_Evénement
spécifie le gestionnaire d'événements pour ondataavailable en lecture et écriture.
Set Objet_Document.onreadystatechange= Gestionnaire_Evénement
spécifie le gestionnaire d'événement pour être appelé lorsque la propriété readyState se modifie en lecture et écriture.
Set Objet_Document.ontransformnode = Gestionnaire_Evénement
spécifie le gestionnaire d'événement pour ontransformnode en lecture et écriture.
Set Objet_Document = Objet_Document.ownerDocument
retourne la racine du document qui contient ce noeud en lecture seule.
Set Objet_Node = Objet_Document.parentNode
contient le noeud parent en lecture seule.
True | False = Objet_Document.parsed
contient la valeur True si le noeud et tous ses descendants ont été analysées et instanciées, ou False si n'importe quels noeuds restent à être analysées en lecture seule.
Set Objet_Error = Objet_Document.parseError
retourne un objet IXMLDOMParseError qui contient des informations à propos de la dernière erreur analysée en lecture seule.
Valeur = Objet_Document.prefix
retourne le préfixe d'espace de noms en lecture seule.
True | False = Objet_Document.preserveWhiteSpace
contient True si le traitement préserve les espaces blancs, sinon False en lecture et écriture.
Set Objet_Node = Objet_Document.previousSibling
contient le frère gauche de ce noeud en lecture seule.
LOADING (1) | LOADED (2) | INTERACTIVE (3) | COMPLETED (4) =
Objet_Document.readyState
indique l'état courant du document XML en lecture seule.
True | False = Objet_Document.resolveExternals
indique si les définitions externes doivent être résolues en temps d'analyse, indépendantes de validation en lecture et écriture.
True | False = Objet_Document.specified
indique si le noeud est explicitement spécifié ou dérivé d'une valeur par défaut dans le DTD ou le schéma en lecture seule.
Chaîne = Objet_Document.text
contient le contenu textuel du noeud et de sa sous-arborescence en lecture et écriture.
URL = Objet_Document.url
retourne l'URL canonique pour le dernier document XML chargé en lecture seule.
True | False = Objet_Document.validateOnParse
indique si l'analyseur doit valider ce document en lecture et écriture.
Valeur = Objet_Document.xml
contient la représentation XML du noeud et de tous ses descendants en lecture seule.
Les Méthodes
Méthode
Description
Objet_Document.abort()
annule le téléchargement asynchrone en cours.
Set Objet_Node = Objet_Document.appendChild(Nouvel_Enfant)
ajoute un nouvel enfant comme le dernier enfant de ce noeud.
Set Objet_Node = Objet_Document.cloneNode(Bool_Profondeur)
crée un nouveau noeud qui est un double exact de ce noeud.
Set Objet_Attribute = Objet_Document.createAttribute(Nom)
crée un nouvel attribut avec le nom spécifié.
Set Objet_CDATASection = Objet_Document.createCDATASection(Données)
crée un noeud CDATA qui contient les données fournies.
Set Objet_Comment = Objet_Document.createComment(Données)
crée un noeud commentaire qui contient les données fournies.
Set Objet_DocumentFragment =
Objet_Document.createDocumentFragment(DocFragment)
crée un objet vide DocumentFragment.
Set Objet_Element = Objet_Document.createElement(nom)
crée un noeud élément utilisant le nom spécifié.
Set Objet_Node = Objet_Document.createEntityReference(name)
crée une nouvel objet EntityReference.
Set Objet_Node =
Objet_Document.createNode(Type, Nom, URI_Espace_Nom)
crée un noeud utilisant le type, le nom et l'espace de nom fournis.
Set Objet_ProcessingInstruction =
Objet_Document.createProcessingInstruction(Cible, Données)
crée un noeud instruction de traitement qui contient la cible et les données spécifiées.
Set Objet_Text = Objet_Document.createTextNode(Données)
crée un noeud textuel qui contient les données spécifiées.
Set Objet_NodeList = Objet_Document.getElementsByTagName(Nom)
retourne une collection d'éléments qui porteront le nom indiqué.
True | False = Objet_Document.hasChildNodes()
retourne True si le noeud a des enfants.
Set Objet_Node = Objet_Document.insertBefore(Nouvel_Enfant, Référence)
insère un noeud enfant à la gauche du noeud spécifié ou à la fin de la liste.
True | False = Objet_Document.load(Source_XML)
charge un document XML à partir de la localisation spécifiée.
True | False = Objet_Document.loadXML(Chaîne_XML)
charge un document XML utilisant la chaîne de caractères spécifiée.
Set Objet_Node = Objet_Document.nodeFromID(Chaîne_ID)
retourne le noeud duquel l'attribut ID correspond à la valeur fournie.
Set Objet_Node = Objet_Document.removeChild(Noeud_Enfant)
enlève le noeud enfant spécifié de la liste d'enfant et le retourne.
Set Objet_Node =
Objet_Document.replaceChild(Nouvel_Enfant, Ancien_Enfant)
remplace l'ancien noeud enfant spécifié par le nouveau noeud enfant fourni dans le jeu d'enfants de ce noeud.
Objet_Document.save(Destination)
sauvegarde un docment XML vers la localisation spécifiée.
Set Objet_NodeList = Objet_Document.selectNodes(Expression_Pattern)
applique l'opération de mise en correspondance de modèles indiquée au contexte de ce noeud et retourne la liste de noeuds correspondants.
Set Objet_Node = Objet_Document.selectSingleNode(Chaîne_Requête)
applique l'opération de mise en correspondance de modèles indiquée au contexte de ce noeud et retourne la liste de premier noeud correspondant.
Chaîne = Objet_Document.transformNode(Objet_StyleSheet)
traite ce noeud et ses enfants utilisant la feuille de style de tranformation (XSLT) indiquée et retourne la transformation résultante.
Objet_Document.transformNodeToObject(Feuille_Style, Objet)
traite ce noeud et ses enfants utilisant la feuille de style de tranformation (XSLT) indiquée et retourne la transformation résultante dans l'objet fourni.
Les Evénements
Evénement
Description
Objet_Document.ondataavailable = Gestionnaire_Evénément
indique que les données du document XML sont disponibles.
Objet_Document.onreadystatechange = Gestionnaire_Evénément
indique lorsque la propriété readyState change.
True | False = ontransformnode(Noeud_XSL, Noeud_XML)
indique lorsque le traitement de transformation doit continuer ou s'arrêter.
Exemple [voir]
<%
  Const OpenFileForReading = 1

  Dim obj_fso, Objet_Document, obj_info,obj_logiciel,  racine
  Dim obj_nom, obj_commentaire, obj_adresse, obj_editeur
  Dim obj_systeme_exploitation, obj_monnaie, obj_prix
  Dim nom_txt, commentaire_txt, adresse_txt, editeur_txt
  Dim systeme_exploitation_txt, monnaie_txt, prix_txt
  Dim nom, commentaire, adresse, editeur, systeme_exploitation
  Dim monnaie, prix, tableau, i, delimiteur
  i = 1

  Set obj_fso = Server.CreateObject("Scripting.FileSystemObject")
  fichier = Server.MapPath("informations.txt")
  Set obj_info = obj_fso.OpenTextFile(fichier, OpenFileForReading)

  Set Objet_Document = Server.CreateObject("MSXML2.DOMDocument")
  Set racine = Objet_Document.createElement("liste")
  Objet_Document.appendChild racine

  delimiteur = "{"

  Do While Not obj_info.AtEndOfStream
    ligne = obj_info.ReadLine
    tableau = Split(ligne, delimiteur, -1, 1)

    nom = tableau(0)
    commentaire = tableau(1)
    adresse = tableau(2)
    editeur = tableau(3)
    langue = tableau(4)
    systeme_exploitation = tableau(5)
    monnaie = tableau(6)
    prix = tableau(7)

    Response.Write "<b>Ligne n°" & i & "</b><br>---------<br>" & nom _
                           & "<br>" & commentaire & "<br>" & adresse  & "<br>" _
                           & editeur & "<br>" & langue & "<br>" _
                           & systeme_exploitation & "<br>" & monnaie _
                           & " " & prix & "<br><br>"

    Set obj_logiciel = Objet_Document.createElement("logiciel")
    obj_logiciel.setAttribute "langue", langue
    obj_logiciel.setAttribute "systeme_exploitation", systeme_exploitation

    Set obj_nom = Objet_Document.createElement("nom")
    Set nom_txt = Objet_Document.createTextNode(nom)

    Set obj_commentaire = Objet_Document.createElement("commentaire")
    Set commentaire_txt = Objet_Document.createTextNode(commentaire)

    Set obj_editeur = Objet_Document.createElement("editeur")
    Set editeur_txt = Objet_Document.createTextNode(editeur)
    obj_editeur.setAttribute "adresse", adresse

    Set obj_prix = Objet_Document.createElement("prix")
    Set prix_txt = Objet_Document.createTextNode(prix)
    obj_prix.setAttribute "monnaie", monnaie

    obj_nom.appendChild nom_txt
    obj_commentaire.appendChild commentaire_txt
    obj_editeur.appendChild editeur_txt
    obj_prix.appendChild prix_txt

    obj_logiciel.appendChild obj_nom
    obj_logiciel.appendChild obj_commentaire
    obj_logiciel.appendChild obj_editeur
    obj_logiciel.appendChild obj_prix

    racine.appendChild obj_logiciel

    i = i + 1
  Loop

  Objet_Document.save(Server.MapPath("logiciel.xml"))

  Response.Write "Le fichier de statistique au format XML" _
                         & " est disponible à l'adresse suivante :<br>" _
                         & Server.MapPath("logiciel.xml")

  obj_info.close
  Set obj_info = Nothing
%>

2.2.2 / L'objet IXMLDOMDocument2

L'objet IXMLDOMDocument2 est une extension de DOMDocument qui supporte les schémas cachés et les caractéristiques de validation, et change de support XPath.

Set objet_Document2 = _
             Server.CreateObject("Msxml2.DOMDocument")
Set objet_FTDocument2 = _
             Server.CreateObject("Msxml2.FreeThreadedDOMDocument")
Les Propriétés
Propriété
Description
Set Objet_SchemaCollection = Objet_Document2.namespaces
retourne laliste des espaces de noms dans le document.
Set Objet_SchemaCollection = Objet_Document2.schemas
utilise les objets XMLSchemaCache et IXMLDOMSchemaCollection pour trouver les documents de schéma.
Les Méthodes
Propriété
Méthode
Valeur_Propriété = Objet_Document2.getProperty(nom)
identifie les valeurs par défaut ou les valeurs fixées par la méthode setProperty.
Set Objet_Selection = Objet_Document2.selectNodes(expression)
modifie les noeuds sélectionnés pour retourner un objet IXMLDOMSelection.
objXMLDOMDocument2.setProperty(nom, valeur)
permet de fixer les proprétés.
Objet_Document2.validate()
exécute une opération de validation sur le document XML courant chargé.
Exemple [voir]
<%
  Dim Objet_Document, objet_listenoeuds
  Dim fichier, noeud, i
  Dim expression, langage

  Set Objet_Document = Server.CreateObject("Msxml2.DOMDocument")
  Objet_Document.async = false
  fichier = Server.MapPath("logitheque.xml")
  Objet_Document.load(fichier)
  Objet_Document.setProperty "SelectionLanguage", "XPath"
  Set objet_listenoeuds = Objet_Document.selectNodes _
                                    ("//categorie[@nom][contains(., 'Editeur')]/logiciel")

  i = 0
  expression = objet_listenoeuds.expr
  langage = objet_listenoeuds.getProperty("SelectionLanguage")

  Response.Write "<h3>Résultat de l'expression <i>" & langage _
                      & "</i> : " & expression & "</h3>" _
                      & "<u>La liste contient "& objet_listenoeuds.length _
                      & " noeuds :</u><hr>"

  For Each noeud In objet_listenoeuds
    i = i + 1
    Response.Write i " - <b>" & noeud.attributes.item(0).value _
                       & "</b> : " & noeud.text & "<br>"
  Next
%>

2.2.3 / L'objet IXMLDOMNamedNodeMap

L'objet IXMLDOMNamedNodeMap ajoute le support pour les espaces de noms et l'itération par l'intermédaire de la collection de noeuds d'attribut.

Objet_NamedNodeMap = Objet_Node.attributes

Cet objet est une collection de noeuds typiquement utilisée pour les attributs.

Les noeuds contenus dans l'objet IXMLDOMNamedNodeMap peuvent être accédés par l'intermédiaire de leur nom ou de leur index passé en argument dans les différentes méthodes disponibles destinées à les manipuler.

Set Objet_Attribut = Objet_NamedNodeMap.getNamedItem(Nom)

Objet_Attribut = Objet_NamedNodeMap.item(Index)

Objet_Attribut = Objet_NamedNodeMap.removeNamedItem(Nom)

Des objets IXMLDOMAttribute peuvent être insérés dans une collection IXMLDOMNamedNodeMap en faisant appel à sa méthode setNamedItem.

Objet_Attribut = _
      Objet_NamedNodeMap.setNamedItem(Objet_Attribute)

L'éxécution de Microsoft préserve l'ordre des attributs dans lequel ces derniers apparaissent dans la source XML. Les attributs supplémentaires sont ajoutés à la fin de la liste. Un attribut de'espace de noms (xmlns) est inséré comme le premier dans la liste si le nom de balise requiert l'espace de noms, ou immédiatement avant l'attribut qui emploie un espace de noms non déclaré.

La collection IXMLDOMNamedNodeMap est similaire à une liste de noeuds, toutefois la collection est active. En effet, l'ajout, le déplacement de noeuds et les modifications dans des noeuds, sont immédiatement répercutés au sein de la collection. En conséquence, deux requêtes successives sur des membres de la collection utilisant le même index peuvent retourner deux items différents, dépendant des changements dans la collection.
En outre, les modifications sur les objets nodaux sont immédiatement disponibles dans les noeuds obtenus à partir de la liste.

Lorsqu'une valeur par défaut est spécifiée dans le schéma pour un attribut et que ce dernier est déplacé, il est automatiquement regénéré avec la valeur par défaut, comme spécifié dans le standard du W3C. L'attribut réapparaît immédiatement, car la collection est active, avec une modfication correspondante dans le nombre d'items de la collection. En déplaçant un attribut avec un tel paramètrage par défaut, il faut de nouveau récupérer le nombre d'items dans la collection pour obtenir un compte précis. Il faut également réinitialiser n'importe quel index dans la collection.

Les Propriétés
Propriété
Description
Nombre = Objet_NamedNodeMap.length
indique le nombre d'items dans la collection en lecture seule.
Les Méthodes
Méthode
Description
Set Objet_Attribut = Objet_NamedNodeMap.getNamedItem(Nom)
récupère l'attribut avec le nom spécifié.
Set Objet_Attribut =
Objet_NamedNodeMap.getQualifiedItem(Nom_Base, URI_Espace_Noms)
retourne l'attribut avec l'espace de noms et le nom de l'attribut spécifiés.
Set Objet_Attribut = Objet_NamedNodeMap.item(Index)
autorise l'accès aléatoire à des noeuds individuels à l'intérieur d'une collection, en lecture seule.
Set Objet_Attribut = Objet_NamedNodeMap.removeNamedItem(Nom)
enlève un attribut depuis une collection.
Set Objet_Attribut =
Objet_NamedNodeMap.removeQualifiedItem(Nom_Base, URI_Espace_Noms)
enlève l'attribut avec l'espace de noms et le nom de l'attribut spécifiés.
Objet_NamedNodeMap.reset()
réinitialise le moteur d'itération (iterator).
Set Objet_Attribut =
Objet_NamedNodeMap.setNamedItem(Objet_Attribute)
ajoute le noeud fourni à la collection.
Exemple [voir]
<html>
  <head>
    <script language="Javascript" type="text/javascript">
      var Tab_TypeNoeud = new Array('NODE_ELEMENT',
                 'NODE_ATTRIBUTE', 'NODE_TEXT', 'NODE_CDATA_SECTION',
                 'NODE_ENTITY_REFERENCE', 'NODE_ENTITY',
                 'NODE_PROCESSING_INSTRUCTION', 'NODE_COMMENT',
                 'NODE_DOCUMENT', 'NODE_DOCUMENT_TYPE', 
                 'NODE_DOCUMENT_FRAGMENT', 'NODE_NOTATION');
      function Analyse()
      {
        var tab1 = '<table border="1" cellpadding="3" 
                                   cellspacing="3" width="60%">'
              + '<tr><th width="10%">Noeud parent</th>'
              + '<th width="45%">Nom du Noeud</th>'
              + '<th width="45%">Type du Noeud</th></tr><tr>'
              + '<th colspan="3">Valeur du Noeud</th></tr>';
        var tab2 = '</table>';
        var Info;
        var Fichier_XML = Donnee_XML;
        if (Fichier_XML.parseError.errorCode != 0)
        {
          Info = '<h3>Le fichier XML est invalide.</h3>';
          Info += '<table><tr><td><b>Code d'erreur</b></td><td><b>: </b>'
                    + Fichier_XML.parseError.errorCode + '</td></tr>';
          Info += '<tr><td><b>Description</b></td><td><b>: </b>' 
                    + Fichier_XML.parseError.reason + '</td></tr>';
          Info += '<tr><td><b>Fichier</b></td><td><b>: </b>'
                    + Fichier_XML.parseError.filepos + '</td></tr>';
          Info += '<tr><td><b>Adresse du fichier</b></td><td><b>: </b>'
                    + Fichier_XML.parseError.url + '</td></tr>';
          Info += '<tr><td><b>Ligne responsable</b></td><td><b>: </b>'
                    + Fichier_XML.parseError.srcText + '</td></tr>';
          Info += '<tr><td><b>Numéro de Ligne</b></td><td><b>: </b>'
                    + Fichier_XML.parseError.line + '</td></tr>';
          Info += '<tr><td><b>Numéro de Colonne</b></td><td><b>: </b>'
                    + Fichier_XML.parseError.linepos + '</td></tr></table>';
          document.write(Info);
          return;
        }
        Affichage.innerHTML = tab1 + AffichageNoeudEnfant(Fichier_XML, 0) + tab2;
      }

      function AffichageNoeudEnfant(Noeud, Niveau)
      {
        var Resultat = '';
        var Longueur = 0;
        var Num_Noeud = 0;
        var Objet_NamedNodeMap;
        var Index_Attribute;

        Objet_NamedNodeMap = Noeud.attributes;

        if (Objet_NamedNodeMap != null)
        {
          Longueur = Objet_NamedNodeMap.length;
          if (Longueur > 0)
          {
            for (Index_Attribute = 0; Index_Attribute < Longueur; Index_Attribute++)
            {
              Resultat += '<tr><th>' + Noeud.nodeName + '</th><td><b>'
               + Objet_NamedNodeMap(Index_Attribute).nodeName
               + '</b></td><td style="color:blue; font-weight:bold">'
               + Tab_TypeNoeud[Objet_NamedNodeMap(Index_Attribute).nodeType - 1]
               + '</td></tr><tr><td colspan="3">'
               + Objet_NamedNodeMap(Index_Attribute).nodeValue + '</td></tr>';
             }
          }
        }
        Longueur = Noeud.childNodes.length;
        if (Longueur > 0)
        {
          for (Num_Noeud = 0; Num_Noeud < Longueur; Num_Noeud++)
          {
            Resultat += 
                AffichageNoeudEnfant(Noeud.childNodes(Num_Noeud), Niveau + 1);
          }
          return Resultat;
        }
      }
    </script>
  </head>
  <body onload="Analyse()">
    <XML id="Donnee_XML" src="logitheque.xml"></XML>
    <span id="Affichage"></span>
  </body>
</html>

2.2.4 / L'objet IXMLDOMNode

L'objet IXMLDOMNode étend le noeud central avec un support pour les types de données, les espaces de noms, les DTD (document type definitions) et les schémas.

L'objet IXMLDOMNode est créé par l'intermédiaire de la méthode createNode appliquées à l'objet DOMDocument, permettant la création de quasiment tous les types de noeuds. Par ailleurs, d'autres méthodes de création plus ciblées existent afin de créer des noeuds précis à l'image de createAttribute ou encore createDocumentFragment.

Set Objet_Noeud = Objet_Document.createNode(1, Nom_Elt)

Les valeurs des noeuds peuvent être ajoutées au moyen de diverses commandes. Pour les noeuds éléments, il est nécessaire de créer un noeud textuel (createNodeText) dans lequel est stocké la valeur du noeud élément ou éventuellement attribut. Ensuite, à l'aide de la méthode appendChild, le l'objet IXMLNodeText est affecté dans le noeud correspondant.

Set Objet_Element = Objet_Document.createElement("nom")
Set Objet_Text = Objet_Document.createNodeText(valeur)
Objet_Element.appendChild Objet_Text

Objet_Node_Existant.nodeValue = Nouvelle_Valeur

Un objet nodal peut être obtenu à partir d'une multitude de méthodes et de propriétés.

Set Objet_Noeud = _
              Objet_NodeList.selectSingleNode("//elements/element")

Set Objet_Noeud = Objet_Node.firstChild

Dans un document XML, tout est décomposable en noeud. Ainsi, les instructions de traitements, la définition de type de document, l'élément racine, l'ensemble des descendants, les attributs ou encore le texte et les références d'entités sont tous des noeuds distingués par un type particulier.

Les propriétés nodeType et nodeTypestring appliquées à un objet nodal permettent de déterminer le type de noeud soit respectivement par une valeur numérique, soit par une chaîne de caractères.

Valeur_numérique = Objet_Node.nodeType
Chaîne = Objet_Node.nodeTypeString

Le modèle d'objet de document XML propose plusieurs solutions afin de naviguer dans l'arborescence d'un document. Il existe des méthodes de sélection de noeuds (selectSingleNode, selectNodes), de liste de noeuds (childNodes, attributes) ou de fragment de document (createDocumentFragment).

Set Objet_ListeNoeuds = Objet_Node.attributes

Set Objet ListeNoeuds = _
        Objet_Document.SelectNodes("/element[@attribut='valeur']")

A partir de là, il devient possible de parcourir des objets en avant (nextSibling, lastChild) ou en arrière (previousSibling, firstChild) de remonter au parent (parentNode) ou au document (ownerDocument).

Set Objet_Noeud = Objet_Node.previousSibling

Set Objet_Noeud = Objet_Node.ownerDocument

Sur un noeud courant, l'extraction de la valeur (nodeValue, text) ou de ses caractèristiques à l'instar de son type de donnée (dataType) et de son nom (nodeName), peuvent s'effectuer aisément à l'aide des outils fournis.

nom_element = Objet_Node.nodeName

valeur = Objet_Node.nodeValue

URI_espace_de_nom = Objet_Node.namespaceURI
Les Propriétés
Propriété
Description
Set Objet_NamedNodeMap = Objet_Node.attributes
contient la liste des attributs pour ce noeud en lecture seule.
Chaîne = Objet_Node.baseName
retourne le nom de base pour le nom qualifié avec l'espace de noms en lecture seule.
Set Objet_NodeList = Objet_Node.childNodes
contient une liste de noeuds contenant les enfants en lecture seule.
Valeur = Objet_Node.dataType
indique le type de données pour ce noeud en lecture et écriture.
Set Objet_Node = Objet_Node.definition
retourne la définition d'un noeud dans le DTD ou le schéma en lecture seule.
Set Objet_Node = Objet_Node.firstChild
contient le premier enfant de ce noeud en lecture seule.
Set Objet_Node = Objet_Node.lastChild
contient le dernier noeud enfant en lecture seule.
Chaîne = Objet_Node.namespaceURI
retourne l'URI (Uniform Resource Identifier) pour l'espace de noms en lecture seule.
Set Objet_Node = Objet_Node.nextSibling
contient le frère suivant de ce noeud dans la liste d'enfants des parents en lecture seule.
Chaîne = Objet_Node.nodeName
contient le nom qualifié de l'élément, l'attribut, la référence d'entité ou une chaîne de caractères fixée pour d'autres types de noeud en lecture seule.
Valeur = Objet_Node.nodeType
spécifie le type de noeud XML DOM qui détermine des valeurs valides et si le noeud peut avoir des noeuds enfants en lecture seule.
Valeur = Objet_Node.nodeTypedValue
contient la valeur de ce noeud exprimée dans son type de donnée défini en lecture et écriture.
Chaîne = Objet_Node.nodeTypeString
retourne le type de noeud dans une forme de chaîne de caractères en lecture seule.
Valeur = Objet_Node.nodeValue
contient le texte associé avec le noeud en lecture et écriture.
Set Objet_Document = Objet_Node.ownerDocument
retourne la racine du document qui contient ce noeud en lecture seule.
Set Objet_Node = Objet_Node.parentNode
contient le noeud parent en lecture seule.
True | False = Objet_Node.parsed
contient la valeur True si le noeud et tous ses descendants ont été analysées et instanciées, ou False si n'importe quels noeuds restent à être analysées en lecture seule.
Valeur = Objet_Node.prefix
retourne le préfixe d'espace de noms en lecture seule.
Set Objet_Node = Objet_Node.previousSibling
contient le frère gauche de ce noeud en lecture seule.
True | False = Objet_Node.specified
indique si le noeud est explicitement spécifié ou dérivé d'une valeur par défaut dans le DTD ou le schéma en lecture seule.
Chaîne = Objet_Node.text
contient le contenu textuel du noeud et de sa sous-arborescence en lecture et écriture.
Valeur = Objet_Node.xml
contient la représentation XML du noeud et de tous ses descendants en lecture seule.
Les Méthodes
Méthode
Description
Set Objet_Node.appendChild(Nouvel_Enfant)
ajoute un nouvel enfant comme le dernier enfant de ce noeud.
Set Objet_Node.cloneNode(Bool_Profondeur)
crée un nouveau noeud qui est un double exact de ce noeud.
true | false = Objet_Node.hasChildNodes()
retourne True si le noeud a des enfants.
Set Objet_Node = Objet_Node.insertBefore(Nouvel_Enfant, Référence)
insère un noeud enfant à la gauche du noeud spécifié ou à la fin de la liste.
Set Objet_Node = Objet_Node.removeChild(Noeud_Enfant)
enlève le noeud enfant spécifié de la liste d'enfant et le retourne.
Set Objet_Node = Objet_Node.replaceChild(Nouvel_Enfant, Ancien_Enfant)
remplace l'ancien noeud enfant spécifié par le nouveau noeud enfant fourni dans le jeu d'enfants de ce noeud.
Set Objet_NodeList = Objet_Node.selectNodes(Expression_Pattern)
applique l'opération de mise en correspondance de modèles indiquée au contexte de ce noeud et retourne la liste de noeuds correspondants.
Set Objet_Node = Objet_Node.selectSingleNode(Chaîne_Requête)
applique l'opération de mise en correspondance de modèles indiquée au contexte de ce noeud et retourne la liste de premier noeud correspondant.
true | false = Objet_Node.transformNode(Objet_StyleSheet)
traite ce noeud et ses enfants utilisant la feuille de style de tranformation (XSLT) indiquée et retourne la transformation résultante.
Objet_Node.transformNodeToObject(Feuille_Style, Objet)
traite ce noeud et ses enfants utilisant la feuille de style de tranformation (XSLT) indiquée et retourne la transformation résultante dans l'objet fourni.
Exemple [voir]
<html>
  <head>
    <%
      Dim Objet_Document, fichier
      Dim affichage

      Set Objet_Document = Server.CreateObject("MSXML2.DOMDocument")

      Objet_Document.async = false
      fichier = Server.MapPath("logitheque.xml")
      Objet_Document.load fichier

      affichage = Visualise_Noeud(Objet_Document, 0)

      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
    %>
  </head>
  <body>
    <div><%= affichage %></div>
  </body>
</html>

2.2.5 / L'objet IXMLDOMNodeList

L'objet IXMLDOMNodeList représente une liste de noeuds et supporte l'itération par l'intermédaire d'une collection active et en plus d'un accès indexé.

Les listes de noeuds peuvent être obtenues en utilisant la méthode getElementsByTagName appliquées à l'objet DOMDocument.

Objet_NodeList = _
        Objet_Document.getElementsByTagName(nom)

Les méthodes childNodes et selectNodes de l'objet IXMLDOMNode sont également capables de retourner une liste de noeuds.

Objet_NodeList = Objet_Node.childNodes
Objet_NodeList = Objet_Node.selectNodes(expression_XPath)

Une collection IXMLDOMNodeList est active, c'est-à-dire, que l'ajout ou le déplacement de noeuds et les modifications à l'intérieur des noeuds, sont immédiatement répercutés dans la collection. En conséquence, deux requêtes successives sur des membres de la collection utilisant le même index, retournent deux items différents, dépendant des changements sur la collection.
En outre, les modifications sur les objets nodaux sont immédiatement disponibles dans le noeud obtenu à partir de la liste.

La collection IXMLDOMNodeList peut être parcouru par l'intermédiaire d'une bouble For.

For i = 0 To Objet_NodeList.length - 1
  ...
Next
For Each Objet_Node In Objet_NodeList
  ...
Next
Les Propriétés
Propriété
Description
Nombre = Objet_NodeList.length
indique le nombre d'items dans la collection en lecture seule.
Les Méthodes
Méthode
Description
Objet_Node = Objet_NodeList.item(Index)
autorise l'accès aléatoire à des noeuds individuels à l'intérieur d'une collection, en lecture seule.
Objet_Node = Objet_NodeList.nextNode()
retourne le prochain noeud dans la collection.
Objet_NodeList.reset()
réinitialise le moteur d'itération (iterator).
Exemple [voir]
<%
  Dim Objet_Document
  Dim Objet_NodeList
  Dim noeud, resultat

  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
      set noeud = Objet_NodeList.item(i)
      resultat = resultat & "<tr><td><b>" _
                                 & noeud.attributes.item(0).nodeValue _
                                 & "</b></td><td> : " _
                                 & noeud.firstchild.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

  Set Objet_Document = Nothing
%>

2.2.6 / L'objet IXMLDOMParseError

L'objet IXMLDOMParseError retourne les informations détaillées à propos de la dernière erreur d'analyse en incluant le numéro, la ligne, la colonne de l'erreur.

Objet_Erreur = Objet_Document.parseError
Les Propriétés
Propriété
Description
Valeur = Objet_ParseError.errorCode
contient le code de l'erreur da la dernière erreur d'analyse, en lecture seule.
Valeur = Objet_ParseError.filepos
contient la position du fichier absolue où l'erreur s'est produite, en lecture seule.
Valeur = Objet_ParseError.line
spécifie le numéro de la ligne contenant l'erreur, en lecture seule.
Valeur = Objet_ParseError.linepos
contient la position du caractère à l'intérieur de la ligne où l'erreur s'est produite, en lecture seule.
Chaîne = Objet_ParseError.reason
fournit une explication à propos de l'erreur, en lecture seule.
Chaîne = Objet_ParseError.srcText
retourne le texte complet de la ligne contenant l'erreur, en lecture seule.
Chaîne = Objet_ParseError.url
contient l'adresse URL du document XML contenant la dernière erreur, en lecture seule.
Exemple [voir]
<%
  Dim Objet_Document, Objet_Processeur
  Dim Objet_Style, Objet_Modele
  Dim fichier_xml, fichier_xsl
  Dim Objet_ErrXML, Objet_ErrXSL, Objet_Erreur

  Set Objet_Document = Server.CreateObject("MSXML2.DOMDocument")
  Set Objet_Style = Server.CreateObject("MSXML2.FreeThreadedDOMDocument")
  Set Objet_Modele = Server.CreateObject("MSXML2.XSLTemplate")

  Objet_Document.async = False
  Objet_Style.async = False
  fichier_xml = Server.MapPath("logithseque.xml")
  fichier_xsl = Server.MapPath("logithesque.xsl")
  Objet_Document.Load fichier_xml
  Objet_Style.Load fichier_xsl

  Set Objet_ErrXML = Objet_Document.parseError
  Set Objet_ErrXSL = Objet_Style.parseError

  Sub fonction_erreur(Objet_Erreur)
    Response.Write "<h3>Le chargement a échoué.</h3>" _
                           & "<br><b>Une erreur d'analyse s'est produite.</b>" _
                          & "<br><u>Code :</u> " & Objet_Erreur.errorCode _
                          & "<br><u>Raison :</u> " & Objet_Erreur.reason _
                          & "<br><u>Texte :</u> " & Objet_Erreur.srcText _
                          & "<br><u>URL :</u> " & Objet_Erreur.url _
                          & "<br><u>Position :</u> " & Objet_Erreur.filePos _
                          & "<br><u>Ligne :</u> " & Objet_Erreur.line _
                          & "<br><u>Colonne :</u> " & Objet_Erreur.linePos
  End Sub

  If Objet_ErrXML.errorCode <> 0 OR Objet_ErrXSL.errorCode <> 0 Then
    If Objet_ErrXML.errorCode <> 0 Then
      fonction_erreur(Objet_ErrXML)
    End If
    If Objet_ErrXSL.errorCode <> 0 Then
      fonction_erreur(Objet_ErrXSL)
    End If
  Else
    Set Objet_Modele.stylesheet = Objet_Style
    Set Objet_Processeur = Objet_Modele.createProcessor()
    Objet_Processeur.input = Objet_Document
    Objet_Processeur.addParameter "num", 6
    Objet_Processeur.Transform
    Response.Write Objet_Processeur.output
  End If

  Set Objet_Document = Nothing
  Set Objet_Style = Nothing
  Set Objet_Modele = Nothing
  Set Objet_Processeur = Nothing
%>

2.2.7 / L'objet IXMLHTTPRequest

L'objet IXMLHTTPRequest fournit le support de protocole côté client pour les communications avec les seveurs HTTP.

Set Objet_HTTPRequest = Server.CreateObject("Msxml2.XMLHTTP")

Un ordinateur client peut utiliser l'objet XMLHTTP (MSXML2.XMLHTTP) pour envoyer une requête HTTP arbitraire, recevoir la réponse, et obtenir la réponse de l'analyse du DOM XML de Microsoft.

Cette objet est intégré à l'analyseur de Microsoft XML (MSXML) pour supporter l'envoi du corps de la requête directement à partir des objets DOM de MSXML et analysant la réponse directement à l'intérieur de ces derniers. Lorsque combiné avec le support pour les feuilles de style XSL, l'objet XMLHTTP fournit un moyen simple pour envoyer des requêtes structurées vers les serveurs HTTP et affiche le résultat avec une variété de présentations.

La séquence usuelle commence par l'appel de la méthode open permettant l'ouverture de l'objet IXMLHTTPRequest.

Objet_HttpRequest.open _
                                  "GET", "http://serveur-distant/page.asp", false

Puis une information d'entête habituelle est fixée à l'objet, par l'intermédiaire de la méthode setRequestHeader.

Objet_HttpRequest.setRequestHeader Variable_HTTP, Valeur

Ensuite, l'objet est envoyé au serveur distant par la méthode send. La réponse retournée par le serveur peut être immédiatement retournée si la propriété async est égale à true. Si la valeur de cette dernière est false, la réponse est retournée lorsqu'elle a été entièrement réceptionnée.

ilot_donne.async = false
Objet_HttpRequest.send ilot_donnee.XMLDocument

Enfin, il est possible de vérifier la réponse par l'une des quatres propriétés suivantes : responseBody, responseStream, responseText, responseXML.

Set Objet_XML = Objet_HttpRequest.responseXML
Les Propriétés
Propriété
Description
Objet_HttpRequest.onreadystatechange = Gestionnaire_Evénement
indique le getionnaire d'événements pour être appelé lorsque la propriété readyState change, en lecture et écriture.
Etat = Objet_HttpRequest.readyState
représente l'état de la requête, en lecture seule.
Chaîne = Objet_HttpRequest.responseBody
représente le corps de l'entité de réponse commun tableau d'octets non-signés, en lecture seule.
Stream = Objet_HttpRequest.responseStream
représente le corps de l'entité de réponse comme un flux de données textuelles, en lecture seule.
Texte = Objet_HttpRequest.responseText
représente le corps de l'entité de réponse comme une chaîne de caractères, en lecture seule.
Set Objet_XML = Objet_HttpRequest.responseXML
représente le corps de l'entité de réponse comme analysé par l'analyseur de Microsoft MSXML, en lecture seule.
Valeur = Objet_HttpRequest.status
représente le code du statut HTTP retourné par une requête, en lecture seule.
Chaîne = Objet_HttpRequest.statusText
représente le statut de la ligne de réponse HTTP, en lecture seule.
Les Méthodes
Méthode
Description
Objet_HttpRequest.abort()
annule la requête HTTP courante.
Chaîne = Objet_HttpRequest.getAllResponseHeaders()
récupère les valeurs de tous les entêtes HTTP.
Chaîne = Objet_HttpRequest.getResponseHeader(Nom_Entête)
récupère la valeur d'un entête HTTP à partir du corps de la réponse.
Objet_HttpRequest.open({GET | POST | PUT | PROPFIND}, URL_Requête
[, Bool_Async, Nom_Utilisateur, Mot_Passe])
initialise une requête MSXML2.XMLHTTP, et spécifie la méthode, l'adresse URL et les informations d'authentification pour la requête.
Objet_HttpRequest.send([Nom_Corps])
envoie une requête HTTP vers le serveur et reçoit une réponse.
Objet_HttpRequest.setRequestHeader(Nom_Entête)
spécifie le nom d'un entête HTTP.
Exemple [voir]
<html>
  <body onload="return insere_pi()">
    <XML id="ilot_donnee">
      <personne>
        <nom></nom>
        <prenom></prenom>
        <adresse></adresse>
        <code_postal></code_postal>
        <ville></ville>
      </personne>
    </XML>
    <table border="0" align="center">
      <tr>
        <th align="left">Nom</th>
        <td>: <input type="text" name="snom" size="20"/></td>
      </tr>
      <tr>
        <th align="left">Prénom</th>
        <td>: <input type="text" name="sprenom" size="20"/></td>
      </tr>
      <tr>
        <th align="left">Adresse</th>
        <td>: <input type="text" name="sadresse" size="20"/></td>
      </tr>
      <tr>
        <th align="left">Code Postal</th>
        <td>: <input type="text" name="scode_postal" size="6"/></td>
      </tr>
      <tr>
        <th align="left">Ville</th>
        <td>: <input type="text" name="sville" size="20"/></td>
      </tr>
      <tr>
        <th colspan="2">
          <input type="submit" value="Soumission" onclick="envoi()"/>
           
          <input type="reset" value="Annulation"/>
        </td>
      </tr>
    </table>
   <script language="VBScript" type="text/vbscript">
      Function insere_pi()
        Set obj_pi = _
          ilot_donnee.createProcessingInstruction _
                 ("xml", "version='1.0' encoding='iso-8859-1'")
        ilot_donnee.insertBefore obj_pi, ilot_donnee.firstChild
      End Function

      Function envoi()
        If Not IsNull(snom.value) _
               AND Not IsNull(sprenom.value) _
               AND Not IsNull(sadresse.value) _
               AND IsNumeric(scode_postal.value) _
               AND Not IsNull(sville.value) Then
          ilot_donnee.documentElement.getElementsByTagName _
                                   ("nom").item(0).text = snom.value
          ilot_donnee.documentElement.getElementsByTagName _
                                   ("prenom").item(0).text = sprenom.value
          ilot_donnee.documentElement.getElementsByTagName _
                                   ("adresse").item(0).text = sadresse.value
          ilot_donnee.documentElement.getElementsByTagName _
                                   ("code_postal").item(0).text = scode_postal.value
          ilot_donnee.documentElement.getElementsByTagName _
                                   ("ville").item(0).text = sville.value

          Dim Objet_HttpRequest
          Set Objet_HttpRequest = CreateObject("MSXML2.XMLHTTP")
          Objet_HttpRequest.open "GET", "http://serveur-distant/reponse.asp", false

          Dim agent
          agent = "Mozilla/4.0 (compatible; MSIE 6.0; " _
                   & "Windows NT 5.0; .NET CLR 1.0.2914)"

          Objet_HttpRequest.setRequestHeader "User-Agent", agent

          ilot_donnee.async = false
          Objet_HttpRequest.send ilot_donnee.XMLDocument

          msgBox("responseText : " & Objet_HttpRequest.responseText _
                    & vbCrLf & "statusText : " _
                    & Objet_HttpRequest.statusText & vbCrLf_
                    & "getAllResponseHeaders : " _
                    & Objet_HttpRequest.getAllResponseHeaders())
        Else
          msgBox("Les informations fournies sont invalides !")
        End If
      End Function
    </script>
  </body>
</html>
Fichier : reponse.asp
<%@ language=jscript %>
<%
  Response.Expires = -1000;

  var Objet_Document = Server.CreateObject("MSXML2.DOMDocument");
  var dom_resultat = Server.CreateObject("MSXML2.DOMDocument");
  Objet_Document.async = false;
  Objet_Document.load(Request);

  var agent = "Mozilla/4.0"
  var Agent_Utilisateur = Request.ServerVariables("HTTP_User_Agent");
  var chaine = Objet_Document.documentElement.childNodes.item(0).text;

  Response.ContentType = "text/xml";

  if(Agent_Utilisateur.test(agent))
  {
    dom_resultat.loadXML("<resultat>" + chaine +" </resultat>");

    var obj_pi = dom_resultat.createProcessingInstruction("xml", 
                                     "version='1.0' encoding='iso-8859-1'");

    dom_resultat.insertBefore(obj_pi, dom_resultat.firstChild);

    dom_resultat.save(Response);
  }
  else
  {
    Response.Write("<h3>Données récupérées pour ajout sont :</h3>"
                    + "<p>" + chaine + " </p>");
  }
%>

2.2.8 / L'objet IXTLRuntime

L'objet IXTLRuntime représente une partie de l'ancien langage des feuilles de style extensible (XSL) mis en oeuvre.

Cet objet exécute diverses méthodes qui peuvent être directement appelées de l'intérieur des feuilles de style de transformations (XSLT).

L'objet IXTLRuntime implémenté dans le parseur MSXML2 est totalement déprécié dans la version 4.0 de MSXML et n'apparaît plus dans les interfaces DOM XML de Microsoft.

Les Propriétés
Propriété
Description
Objet_NamedNodeMap = Objet_Runtime.attributes
contient la liste des attributs pour ce noeud en lecture seule.
Chaîne = Objet_Runtime.baseName
retourne le nom de base pour le nom qualifié avec l'espace de noms en lecture seule.
Objet_NodeList = Objet_Runtime.childNodes
contient une liste de noeuds contenant les enfants en lecture seule.
Objet_Valeur = Objet_Runtime.dataType
indique le type de données pour ce noeud en lecture et écriture.
Objet_Node = Objet_Runtime.definition
retourne la définition d'un noeud dans le DTD ou le schéma en lecture seule.
contient l'élément racine du document en lecture et écriture.
Objet_Node = Objet_Runtime.firstChild
contient le premier enfant de ce noeud en lecture seule.
Objet_Node = Objet_Runtime.lastChild
retourne le dernier noeud enfant en lecture seule.
Chaîne = Objet_Runtime.namespaceURI
retourne l'URI (Uniform Resource Identifier) pour l'espace de noms en lecture seule.
Objet_Node = Objet_Runtime.nextSibling
contient le frère suivant de ce noeud dans la liste d'enfants des parents en lecture seule.
Chaîne = Objet_Runtime.nodeName
contient le nom qualifié de l'élément, l'attribut, la référence d'entité ou une chaîne de caractères fixée pour d'autres types de noeud en lecture seule.
Valeur = Objet_Runtime.nodeType
spécifie le type de noeud XML DOM qui détermine des valeurs valides et si le noeud peut avoir des noeuds enfants en lecture seule.
Objet_Valeur = Objet_Runtime.nodeTypedValue
contient la valeur de ce noeud exprimée dans son type de donnée défini en lecture et écriture.
Chaîne = Objet_Runtime.nodeTypeString
retourne le type de noeud dans une forme de chaîne de caractères en lecture seule.
Objet_Valeur = Objet_Runtime.nodeValue
contient le texte associé avec le noeud en lecture et écriture.
Objet_Document = Objet_Runtime.ownerDocument
retourne la racine du document qui contient ce noeud en lecture seule.
Objet_Node = Objet_Runtime.parentNode
contient le noeud parent en lecture seule.
True | False = Objet_Runtime.parsed
contient la valeur True si le noeud et tous ses descendants ont été analysées et instanciées, ou False si n'importe quels noeuds restent à être analysées en lecture seule.
Valeur = Objet_Runtime.prefix
retourne le préfixe d'espace de noms en lecture seule.
Objet_Node = Objet_Runtime.previousSibling
contient le frère gauche de ce noeud en lecture seule.
True | False = Objet_Runtime.specified
indique si le noeud est explicitement spécifié ou dérivé d'une valeur par défaut dans le DTD ou le schéma en lecture seule.
Chaîne = Objet_Runtime.text
contient le contenu textuel du noeud et de sa sous-arborescence en lecture et écriture.
Valeur = Objet_Runtime.xml
contient la représentation XML du noeud et de tous ses descendants en lecture seule.
Les Méthodes
Méthode
Description
Valeur = Objet_Runtime.absoluteChildNumber(Objet_Node)
retourne le numéro du noeud qui est relatif à tous les enfants de mêmes parents.
Objet_Runtime.appendChild(Nouvel_Enfant)
ajoute un nouvel enfant comme le dernier enfant de ce noeud.
Valeur = Objet_Runtime.ancestorChildNumber(Nom_Noeud, Objet_Node)
retourne le numéro de l'ancêtre relativement à ses noeuds frères.
Objet_Runtime.cloneNode(Bool_Profondeur)
crée un nouveau noeud qui est un double exact de ce noeud.
Valeur = Objet_Runtime.childNumber(Objet_Node)
retourne le numéro du noeud dans la liste des noeuds enfants du parent avec ce nom.
Valeur = Objet_Runtime.depth(Objet_Node)
retourne le niveau de profondeur à l'intérieur de l'arborescence d'un document où le noeud spécifié apparaît.
Valeur = Objet_Runtime.formatDate(Index, Format_Date, Destination_Locale)
retourne une date formatée seon les indications spécifiées.
Valeur = Objet_Runtime.formatIndex(Index, Format_Index)
retourne un index formaté selon les indications spécifiées.
Valeur = Objet_Runtime.formatNumber(Nombre, Format_Nombre)
retourne un nombre formaté selon les indications spécifiées.
Valeur = Objet_Runtime.formatTime(Valeur_Temps,
Format_Temps, Destination_Locale)
retourne une heure formaté selon des indications spécifiées.
Objet_Runtime.hasChildNodes()
retourne True si le noeud a des enfants.
Objet_Runtime.insertBefore(Nouvel_Enfant, Référence)
insère un noeud enfant à la gauche du noeud spécifié ou à la fin de la liste.
Objet_Runtime.removeChild(Noeud_Enfant)
enlève le noeud enfant spécifié de la liste d'enfant et le retourne.
Objet_Runtime.replaceChild(Nouvel_Enfant, Ancien_Enfant)
remplace l'ancien noeud enfant spécifié par le nouveau noeud enfant fourni dans le jeu d'enfants de ce noeud.
Objet_Runtime.selectNodes(Expression_Pattern)
applique l'opération de mise en correspondance de modèles indiquée au contexte de ce noeud et retourne la liste de noeuds correspondants.
Objet_Runtime.selectSingleNode(Chaîne_Requête)
applique l'opération de mise en correspondance de modèles indiquée au contexte de ce noeud et retourne la liste de premier noeud correspondant.
Objet_Runtime.transformNode(Objet_StyleSheet)
traite ce noeud et ses enfants utilisant la feuille de style de tranformation (XSLT) indiquée et retourne la transformation résultante.
Objet_Runtime.transformNodeToObject(Feuille_Style, Objet)
traite ce noeud et ses enfants utilisant la feuille de style de tranformation (XSLT) indiquée et retourne la transformation résultante dans l'objet fourni.
Valeur = Objet_Runtime.uniqueID(Objet_Node)
retourne l'identificateur unique pour le noeud indiqué.

2.2.9 / L'objet IXMLDOMAttribute

L'objet IXMLDOMAttribute représente un attribut de l'objet IXMLDOMElement. Les valeurs valides et par défaut pour les attributs sont définies dans un DTD (Document Type Definition) ou un schéma.

La création d'un attribut s'effectue par l'intermédiaire de la méthode createAttribute de l'objet DOMDocument.

set Objet_Attribute = Objet_DOMDocument.createAttribute(Nom)

L'affectation d'une valeur à un attribut se fait au moyen de la méthode appendChild ajoutant un noeud textuel créé auparavant par la méthode createTextNode de l'objet DOMDocument.

Set valeur_attribut = Objet_DOMDocument.createTextNode(valeur)
Objet_Attribute.appendChild valeur_attribut

Les attributs sont affectés à un élément par l'intermédiaire de la méthode setAttributeNode lorsqu'il s'agît d'un noeud Attribute existant, sinon un autre méthode setAttribute de l'objet IXMLDOMElement permet de créer directement un attribut avec sa valeur.

objet_DOMElement.setAttributeNode(Noeud_attribut)

objet_DOMElement.setAttribute nom_attribut, valeur_attribut

Les noeuds d'attribut ne peuvent être les enfants immédiats de l'objet de IXMLDOMDocumentFragment. Toutefois, ils peuvent être associés aux noeuds d'élément qui sont des enfants du noeud IXMLDOMDocumentFragment.

La relation entre la valeur et les membres spécifiés peut être résumée comme suit :

Dans XML, la valeur d'un attribut est représentée par les noeuds enfants du noeud d'attribut car la valeur peut contenir des références d'entité.
Ainsi les attributs qui contiennent des références d'entité auront une liste d'enfants contenant les noeuds textuels et les noeuds de référence d'entité. De plus, car le type d'attribut peut être inconnu, ils n'ont pas signalé de valeurs d'attribut.

Les Propriétés
Propriété
Description
Chaîne = Objet_Attribute.baseName
retourne le nom de base pour le nom qualifié avec l'espace de noms en lecture seule.
Set Objet_NodeList = Objet_Attribute.childNodes
contient une liste de noeuds contenant les enfants en lecture seule.
Valeur = Objet_Attribute.dataType
indique le type de données pour ce noeud en lecture et écriture.
Set Objet_Node = Objet_Attribute.definition
retourne la définition d'un noeud dans le DTD ou le schéma en lecture seule.
Set Objet_Node = Objet_Attribute.firstChild
contient le premier enfant de ce noeud en lecture seule.
Set Objet_Node = Objet_Attribute.lastChild
contient le dernier noeud enfant en lecture seule.
Set Objet_Implementation = Objet_Attribute.implementation
contient l'objet IXMLDOMImplementation pour ce document en lecture seule.
Set Objet_Node = Objet_Attribute.lastChild
retourne le dernier noeud enfant en lecture seule.
Chaîne = Objet_Attribute.name
contient le nom de l'attribut, en lecture seule.
Chaîne = Objet_Attribute.namespaceURI
retourne l'URI (Uniform Resource Identifier) pour l'espace de noms en lecture seule.
Set Objet_Node = Objet_Attribute.nextSibling
contient le frère suivant de ce noeud dans la liste d'enfants des parents en lecture seule.
Chaîne = Objet_Attribute.nodeName
contient le nom qualifié de l'élément, l'attribut, la référence d'entité ou une chaîne de caractères fixée pour d'autres types de noeud en lecture seule.
Valeur = Objet_Attribute.nodeType
spécifie le type de noeud XML DOM qui détermine des valeurs valides et si le noeud peut avoir des noeuds enfants en lecture seule.
Valeur = Objet_Attribute.nodeTypedValue
contient la valeur de ce noeud exprimée dans son type de donnée défini en lecture et écriture.
Chaîne = Objet_Attribute.nodeTypeString
retourne le type de noeud dans une forme de chaîne de caractères en lecture seule.
Valeur = Objet_Attribute.nodeValue
contient le texte associé avec le noeud en lecture et écriture.
Set Objet_Document = Objet_Attribute.ownerDocument
retourne la racine du document qui contient ce noeud en lecture seule.
Set Objet_Node = Objet_Attribute.parentNode
contient le noeud parent en lecture seule.
True | False = Objet_Attribute.parsed
contient la valeur True si le noeud et tous ses descendants ont été analysées et instanciées, ou False si n'importe quels noeuds restent à être analysées en lecture seule.
Valeur = Objet_Attribute.prefix
retourne le préfixe d'espace de noms en lecture seule.
Set Objet_Node = Objet_Attribute.previousSibling
contient le frère gauche de ce noeud en lecture seule.
True | False = Objet_Attribute.specified
indique si le noeud est explicitement spécifié ou dérivé d'une valeur par défaut dans le DTD ou le schéma en lecture seule.
Chaîne = Objet_Attribute.text
contient le contenu textuel du noeud et de sa sous-arborescence en lecture et écriture.
Valeur = Objet_Attribute.value
contient la valeur de l'attribut, en lecture et écriture.
Valeur = Objet_Attribute.xml
contient la représentation XML du noeud et de tous ses descendants en lecture seule.
Les Méthodes
Méthode
Description
Set Objet_Node = Objet_Attribute.appendChild(Nouvel_Enfant)
ajoute un nouvel enfant comme le dernier enfant de ce noeud.
Set Objet_Node = Objet_Attribute.cloneNode(Bool_Profondeur)
crée un nouveau noeud qui est un double exact de ce noeud.
True | False = Objet_Attribute.hasChildNodes()
retourne True si le noeud a des enfants.
Set Objet_Node = Objet_Attribute.insertBefore(Nouvel_Enfant, Référence)
insère un noeud enfant à la gauche du noeud spécifié ou à la fin de la liste.
Set Objet_Node = Objet_Attribute.removeChild(Noeud_Enfant)
enlève le noeud enfant spécifié de la liste d'enfant et le retourne.
Set Objet_Node = Objet_Attribute.replaceChild(Nouvel_Enfant, Ancien_Enfant)
remplace l'ancien noeud enfant spécifié par le nouveau noeud enfant fourni dans le jeu d'enfants de ce noeud.
Set Objet_NodeList = Objet_Attribute.selectNodes(Expression_Pattern)
applique l'opération de mise en correspondance de modèles indiquée au contexte de ce noeud et retourne la liste de noeuds correspondants.
Set Objet_Node = Objet_Attribute.selectSingleNode(Chaîne_Requête)
applique l'opération de mise en correspondance de modèles indiquée au contexte de ce noeud et retourne la liste de premier noeud correspondant.
Chaîne = Objet_Attribute.transformNode(Objet_StyleSheet)
traite ce noeud et ses enfants utilisant la feuille de style de tranformation (XSLT) indiquée et retourne la transformation résultante.
Objet_Attribute.transformNodeToObject(Feuille_Style, Objet)
traite ce noeud et ses enfants utilisant la feuille de style de tranformation (XSLT) indiquée et retourne la transformation résultante dans l'objet fourni.
Exemple [voir]
<%
  Const OpenFileForReading = 1

  Dim obj_fso, obj_dom, obj_log, racine
  Dim obj_client, obj_document, obj_protocole, obj_code, obj_methode
  Dim document_txt, protocole_txt, code_txt, methode_txt
  Dim adresse_attr, adresse_txt, poids_attr, poids_txt
  Dim adresse_ip, methode, document, protocole, code, poids
  Dim tableau, elt_adresse, i
  i = 1

  Set obj_fso = Server.CreateObject("Scripting.FileSystemObject")
  fichier = Server.MapPath("fichier_log.txt")
  Set obj_log = obj_fso.OpenTextFile(fichier, OpenFileForReading)

  Set obj_dom = Server.CreateObject("MSXML2.DOMDocument")
  Set racine = obj_dom.createElement("statistique")
  obj_dom.appendChild racine

  Do While Not obj_log.AtEndOfStream
    ligne = obj_log.ReadLine
    tableau = Split(ligne, " ", -1, 1)
    elt_adresse = Split(tableau(3), ",", -1, 1)

    adresse_ip = tableau(0)
    methode = Right(elt_adresse(0), Len(elt_adresse(0)) - 1)
    document = elt_adresse(1)
    protocole = Left(elt_adresse(2), Len(elt_adresse(2)) - 1)
    code = tableau(4)
    poids = tableau(5)

    Set obj_client = obj_dom.createElement("client")
    Set adresse_attr = obj_dom.createAttribute("adresse_ip")
    Set adresse_txt = obj_dom.createTextNode(adresse_ip)
    obj_client.setAttributeNode(adresse_attr)

    Set obj_document = obj_dom.createElement("document")
    Set document_txt = obj_dom.createTextNode(document)
    Set poids_attr = obj_dom.createAttribute("poids")
    Set poids_txt = obj_dom.createTextNode(poids)
    obj_document.setAttributeNode(poids_attr)

    Set obj_protocole = obj_dom.createElement("protocole")
    Set protocole_txt = obj_dom.createTextNode(protocole)

    Set obj_code = obj_dom.createElement("code")
    Set code_txt = obj_dom.createTextNode(code)

    Set obj_methode = obj_dom.createElement("methode")
    Set methode_txt = obj_dom.createTextNode(methode)

    poids_attr.appendChild poids_txt
    adresse_attr.appendChild adresse_txt

    obj_document.appendChild document_txt
    obj_protocole.appendChild protocole_txt
    obj_code.appendChild code_txt
    obj_methode.appendChild methode_txt

    obj_client.appendChild obj_document
    obj_client.appendChild obj_protocole
    obj_client.appendChild obj_code
    obj_client.appendChild obj_methode

    racine.appendChild obj_client

    i = i + 1
  Loop

  obj_dom.save(Server.MapPath("fichier_log.xml"))

  obj_log.close
  Set obj_log = Nothing
%>

2.2.10 / L'objet IXMLDOMCDATASection

L'objet IXMLDOMCDATASection est utilisé pour éviter que des blocs de texte soient interprêtés comme du marquage XML.

Set Objet_CDATA = _
                           Objet_Document.createCDATASection(Contenu)

Les sections CDATA permettent l'inclusion de matériel comme des fragments XML à l'intérieur des documents XML sans nécessiter d'opérations d'échappement contrôler tpus les délimiteurs. Le seul délimiteur reconnu dans une section CDATA est sa séquence de fermeture ]]>.

<![CDATA[Texte non analysé]]>

Le texte contenu dans une section CDATA est stocké dans un noeud textuel. Ce texte peut contenir des caractères qui nécessitent normalement des opérations d'échappement dans un document XML bien formé.

Set Objet_Text = Objet_CDATA.firstChild

Les sections CDATA ne peuvent s'imbriquer les unes dans les autres.

Plusieurs méthodes permettent de travailler directement sur le contenu textuel d'une section CDATA, telles que les méthodes replaceData, substringData ou encore splitText effectuant respectivement le remplacement délimité d'une chaîne de caractères, de retourner une partie du contenu textuel, ou de découper le texte en plusieurs sous éléments.

Objet_CDATA.replaceData 16, 7, "est devenu"
Le langage XML devient un langage universel.

Texte = Objet_CDATA.substringData 0, 14
Le langage XML est devenu un langage universel.

Objet_CDATA.splitText 25
Le langage XML est devenu un langage universel.
Les Propriétés
Propriété
Description
Set Objet_NamedNodeMap = Objet_CDATA.attributes
contient la liste des attributs pour ce noeud en lecture seule.
Chaîne = Objet_CDATA.baseName
retourne le nom de base pour le nom qualifié avec l'espace de noms en lecture seule.
Set Objet_NodeList = Objet_CDATA.childNodes
contient une liste de noeuds contenant les enfants en lecture seule.
Chaîne = Objet_CDATA.data
contient les données du noeud CDATA, en lecture et écriture.
Valeur = Objet_CDATA.dataType
indique le type de données pour ce noeud en lecture et écriture.
Set Objet_Node = Objet_CDATA.definition
retourne la définition d'un noeud dans le DTD ou le schéma en lecture seule.
Set Objet_Node = Objet_CDATA.firstChild
contient le premier enfant de ce noeud en lecture seule.
Set Objet_Node = Objet_CDATA.lastChild
retourne le dernier noeud enfant en lecture seule.
Valeur = Objet_CDATA.length
spécifie la longueur, en caractères des données, en lecture seule.
Chaîne = Objet_CDATA.namespaceURI
retourne l'URI (Uniform Resource Identifier) pour l'espace de noms en lecture seule.
Set Objet_Node = Objet_CDATA.nextSibling
contient le frère suivant de ce noeud dans la liste d'enfants des parents en lecture seule.
Chaîne = Objet_CDATA.nodeName
contient le nom qualifié de l'élément, l'attribut, la référence d'entité ou une chaîne de caractères fixée pour d'autres types de noeud en lecture seule.
Valeur = Objet_CDATA.nodeType
spécifie le type de noeud XML DOM qui détermine des valeurs valides et si le noeud peut avoir des noeuds enfants en lecture seule.
Valeur = Objet_CDATA.nodeTypedValue
contient la valeur de ce noeud exprimée dans son type de donnée défini en lecture et écriture.
Chaîne = Objet_CDATA.nodeTypeString
retourne le type de noeud dans une forme de chaîne de caractères en lecture seule.
Valeur = Objet_CDATA.nodeValue
contient le texte associé avec le noeud en lecture et écriture.
Set Objet_Document = Objet_CDATA.ownerDocument
retourne la racine du document qui contient ce noeud en lecture seule.
Set Objet_Node = Objet_CDATA.parentNode
contient le noeud parent en lecture seule.
True | False = Objet_CDATA.parsed
contient la valeur True si le noeud et tous ses descendants ont été analysées et instanciées, ou False si n'importe quels noeuds restent à être analysées en lecture seule.
Valeur = Objet_CDATA.prefix
retourne le préfixe d'espace de noms en lecture seule.
Set Objet_Node = Objet_CDATA.previousSibling
contient le frère gauche de ce noeud en lecture seule.
True | False = Objet_CDATA.specified
indique si le noeud est explicitement spécifié ou dérivé d'une valeur par défaut dans le DTD ou le schéma en lecture seule.
Chaîne = Objet_CDATA.text
contient le contenu textuel du noeud et de sa sous-arborescence en lecture et écriture.
Valeur = Objet_CDATA.xml
contient la représentation XML du noeud et de tous ses descendants en lecture seule.
Les Méthodes
Méthode
Description
Set Objet_Node = Objet_CDATA.appendChild(Nouvel_Enfant)
ajoute un nouvel enfant comme le dernier enfant de ce noeud.
Objet_CDATA.appendData(Chaîne)
ajoute la chaîne de caractères spécifiée aux données textuelles existantes.
Set Objet_Node = Objet_CDATA.cloneNode(Bool_Profondeur)
crée un nouveau noeud qui est un double exact de ce noeud.
Objet_CDATA.deleteData(Position, Nb_Caractères)
supprime la sous-chaîne de caractères à l'intérieur de données textuelles.
True | False = Objet_CDATA.hasChildNodes()
retourne True si le noeud a des enfants.
Set Objet_Node = Objet_CDATA.insertBefore(Nouvel_Enfant, Référence)
insère un noeud enfant à la gauche du noeud spécifié ou à la fin de la liste.
Objet_CDATA.insertData(Position)
insère la chaîne spécifiée à la position indiquée.
Set Objet_Node = Objet_CDATA.removeChild(Noeud_Enfant)
enlève le noeud enfant spécifié de la liste d'enfant et le retourne.
Set Objet_Node = Objet_CDATA.replaceChild(Nouvel_Enfant, Ancien_Enfant)
remplace l'ancien noeud enfant spécifié par le nouveau noeud enfant fourni dans le jeu d'enfants de ce noeud.
Objet_CDATA.replaceData(position_départ, nombre, Chaîne);
remplace le nombre spécifié de caractères à partir de la position indiquée, par la chaîne fournie en argument.
Set Objet_NodeList = Objet_CDATA.selectNodes(Expression_Pattern)
applique l'opération de mise en correspondance de modèles indiquée au contexte de ce noeud et retourne la liste de noeuds correspondants.
Set Objet_Node = Objet_CDATA.selectSingleNode(Chaîne_Requête)
applique l'opération de mise en correspondance de modèles indiquée au contexte de ce noeud et retourne la liste de premier noeud correspondant.
True | False = Objet_Comment.specified
indique si le noeud est explicitement spécifié ou dérivé d'une valeur par défaut dans le DTD ou le schéma en lecture seule.
Set Objet_Text = Objet_CDATA.splitText(Position)
découpe le texte du noeud à l'intérieur de deux noeuds textuels à la position spécifiée et insère le nouveau texte dans l'arborexcence comme un frère qui suit immédiatement le noeud.
Chaîne = Objet_CDATA.substringData(Position, Nb_Caractères)
récupère une sous-chaîne de caractères d'une chaîne complète à l'intervalle spécifié.
Chaîne = Objet_CDATA.transformNode(Objet_StyleSheet)
traite ce noeud et ses enfants utilisant la feuille de style de tranformation (XSLT) indiquée et retourne la transformation résultante.
Objet_CDATA.transformNodeToObject(Feuille_Style, Objet)
traite ce noeud et ses enfants utilisant la feuille de style de tranformation (XSLT) indiquée et retourne la transformation résultante dans l'objet fourni.
Exemple [voir]
<%
  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

  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)

  Response.Write "<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)

  Response.Write "<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

  Objet_Document.save(Server.MapPath("livre.xml"))
%>

2.2.11 / L'objet IXMLDOMCharacterData

L'objet IXMLDOMCharacterData fournit des méthodes permettant de manipuler du texte qui sont utilisées par plusieurs objets.

L'objet IXMLDOMCharacterData ne correspond directement à aucun type de noeud. Les méthodes sont réutilisées par les objets IXMLDOMCDATASection, IXMLDOMComment et IXMLDOMText.

Ces méthodes manipulent de grandes quantités de texte, y compris de très grandes tailles qui peuvent être manipulées nativement en utilisant les formes de chaînes de caractères.

Les Propriétés
Propriété
Description
Chaîne = Objet_CharacterDATA.baseName
retourne le nom de base pour le nom qualifié avec l'espace de noms en lecture seule.
Set Objet_NodeList = Objet_CharacterDATA.childNodes
contient une liste de noeuds contenant les enfants en lecture seule.
Chaîne = Objet_CharacterDATA.data
contient les données du noeud CDATA, en lecture et écriture.
Valeur = Objet_CharacterDATA.dataType
indique le type de données pour ce noeud en lecture et écriture.
Set Objet_Node = Objet_CharacterDATA.definition
retourne la définition d'un noeud dans le DTD ou le schéma en lecture seule.
Set Objet_Node = Objet_CharacterDATA.firstChild
contient le premier enfant de ce noeud en lecture seule.
Set Objet_Node = Objet_CharacterDATA.lastChild
retourne le dernier noeud enfant en lecture seule.
Valeur = Objet_CharacterDATA.length
spécifie la longueur, en caractères des données, en lecture seule.
Chaîne = Objet_CharacterDATA.namespaceURI
retourne l'URI (Uniform Resource Identifier) pour l'espace de noms en lecture seule.
Set Objet_Node = Objet_CharacterDATA.nextSibling
contient le frère suivant de ce noeud dans la liste d'enfants des parents en lecture seule.
Chaîne = Objet_CharacterDATA.nodeName
contient le nom qualifié de l'élément, l'attribut, la référence d'entité ou une chaîne de caractères fixée pour d'autres types de noeud en lecture seule.
Valeur = Objet_CharacterDATA.nodeType
spécifie le type de noeud XML DOM qui détermine des valeurs valides et si le noeud peut avoir des noeuds enfants en lecture seule.
Valeur = Objet_CharacterDATA.nodeTypedValue
contient la valeur de ce noeud exprimée dans son type de donnée défini en lecture et écriture.
Chaîne = Objet_CharacterDATA.nodeTypeString
retourne le type de noeud dans une forme de chaîne de caractères en lecture seule.
Valeur = Objet_CharacterDATA.nodeValue
contient le texte associé avec le noeud en lecture et écriture.
Set Objet_Document = Objet_CharacterDATA.ownerDocument
retourne la racine du document qui contient ce noeud en lecture seule.
Set Objet_Node = Objet_CharacterDATA.parentNode
contient le noeud parent en lecture seule.
True | False = Objet_CharacterDATA.parsed
contient la valeur True si le noeud et tous ses descendants ont été analysées et instanciées, ou False si n'importe quels noeuds restent à être analysées en lecture seule.
Valeur = Objet_CharacterDATA.prefix
retourne le préfixe d'espace de noms en lecture seule.
Set Objet_Node = Objet_CharacterDATA.previousSibling
contient le frère gauche de ce noeud en lecture seule.
True | False = Objet_CharacterDATA.specified
indique si le noeud est explicitement spécifié ou dérivé d'une valeur par défaut dans le DTD ou le schéma en lecture seule.
Chaîne = Objet_CharacterDATA.text
contient le contenu textuel du noeud et de sa sous-arborescence en lecture et écriture.
Valeur = Objet_CharacterDATA.xml
contient la représentation XML du noeud et de tous ses descendants en lecture seule.
Les Méthodes
Méthode
Description
Set Objet_CharacterDATA.appendChild(Nouvel_Enfant)
ajoute un nouvel enfant comme le dernier enfant de ce noeud.
Objet_CharacterDATA.appendData(Chaîne)
ajoute la chaîne de caractères spécifiée aux données textuelles existantes.
Set Objet_CharacterDATA.cloneNode(Bool_Profondeur)
crée un nouveau noeud qui est un double exact de ce noeud.
Objet_CharacterDATA.deleteData(Position, Nb_Caractères)
supprime la sous-chaîne de caractères à l'intérieur de données textuelles.
True | False = Objet_CharacterDATA.hasChildNodes()
retourne True si le noeud a des enfants.
Set Objet_CharacterDATA.insertBefore(Nouvel_Enfant, Référence)
insère un noeud enfant à la gauche du noeud spécifié ou à la fin de la liste.
Objet_CharacterDATA.insertData(Position)
insère la chaîne spécifiée à la position indiquée.
Set Objet_CharacterDATA.removeChild(Noeud_Enfant)
enlève le noeud enfant spécifié de la liste d'enfant et le retourne.
Set Objet_CharacterDATA.replaceChild(Nouvel_Enfant, Ancien_Enfant)
remplace l'ancien noeud enfant spécifié par le nouveau noeud enfant fourni dans le jeu d'enfants de ce noeud.
Objet_CharacterDATA.replaceData(Position, Nb_Caractères, Données)
remplace le nombre de caractères spécifiés par la chaîne de caractères fournie.
Set Objet_NodeList = Objet_CharacterDATA.selectNodes(Expression_Pattern)
applique l'opération de mise en correspondance de modèles indiquée au contexte de ce noeud et retourne la liste de noeuds correspondants.
Set Objet_CharacterDATA.selectSingleNode(Chaîne_Requête)
applique l'opération de mise en correspondance de modèles indiquée au contexte de ce noeud et retourne la liste de premier noeud correspondant.
True | False = Objet_CharacterDATA.specified
indique si le noeud est explicitement spécifié ou dérivé d'une valeur par défaut dans le DTD ou le schéma en lecture seule.
Chaîne = Objet_CharacterDATA.substringData(Position, Nb_Caractères)
récupère une sous-chaîne de caractères d'une chaîne complète à l'intervalle spécifié.
Chaîne = Objet_CharacterDATA.transformNode(Objet_StyleSheet)
traite ce noeud et ses enfants utilisant la feuille de style de tranformation (XSLT) indiquée et retourne la transformation résultante.
Objet_CharacterDATA.transformNodeToObject(Feuille_Style, Objet)
traite ce noeud et ses enfants utilisant la feuille de style de tranformation (XSLT) indiquée et retourne la transformation résultante dans l'objet fourni.
Exemple [voir]
<%
  Dim Objet_Document, Objet_Style
  Dim racine, PI_xml, PI_stylesheet, fichier_XSL
  Dim Objet_CharacterData, oCommentaire
  Dim oAuteur, cAuteur, oDecription, cDescription
  Dim oNom, oOeuvres, oPoeme
  Dim auteur, description, titre
  Dim quatrain_A, quatrain_B, quatrain_C
  Dim quatrain_D, quatrain_E, saut

  Set Objet_Document = Server.CreateObject("MSXML2.DOMDocument")
  Set Objet_Style = Server.CreateObject("MSXML2.DOMDocument")

  fichier_XSL = Server.MapPath("recueil.xsl")
  Objet_Style.async = False
  Objet_Style.Load fichier_XSL

  Set racine = Objet_Document.createElement("recueil")
  Objet_Document.appendChild racine

  saut = vbCrLf & vbCrLf

  auteur = "Heinrich HEINE"

  description = "Heinrich HEINE vécut en Allemagne entre 1797 et 1856." _
                   & "Il est un poète romantique par excellence, qui chante " _
                   & "l'amour entre la cruelle déception et un certain cynisme. " _
                   & "De plus, il a fortement influencé les milieux littéraires " _
                   & "parisiens, qu'il ne cessa de fréquenter jusqu'à sa mort."

  titre = "Die Zeit"

  quatrain_A = "Ah! qu'il est lent, ah comme il traîne," & vbCrLf _
                  & "le Temps horrible limaçon !" & vbCrLf _
                  & "Sans pouvoir remuer un membre," & vbCrLf _
                  & "je gis ici, cloué sur place."

  quatrain_B = "En ma cellule ne vient luire" & vbCrLf _
                  & "nul rai de soleil ni d'espoir." & vbCrLf _
                  & "Jusqu'à la fosse au cimetière," & vbCrLf _
                  & "je suis voué à mon grabat."

  quatrain_C = "Mourir, c'est déjà fait, peut-être;" & vbCrLf _
                  & "peut-être n'est-ce que fantômes," & vbCrLf _
                  & "ces visions qui font la foire" & vbCrLf _
                  & "toute la nuit dans mon cerveau."

  quatrain_D = "Oui c'est peut-être le spectrale" & vbCrLf _
                  & "sarabande des dieux païens;" & vbCrLf _
                  & "pour leur ébats ça leur va bien," & vbCrLf _
                  & "le crâne creux d'un trépassé."

  quatrain_E = "Mais la folle, la douce orgie," & vbCrLf _
                  & "ces bacchanales de la nuit," & vbCrLf _
                  & "la main du squelette se crispe" & vbCrLf _
                  & "au matin pour les esquisser."

  Set Objet_CharacterDATA = Objet_Document.createTextNode(quatrain_B)

  Set oAuteur = Objet_Document.createElement("auteur")
  Set oNom = Objet_Document.createElement("nom")
  Set cAuteur = Objet_Document.createTextNode(auteur)
  Set oDescription = Objet_Document.createElement("description")
  Set cDescription = Objet_Document.createTextNode(description)
  Set oOeuvres = Objet_Document.createElement("oeuvres")
  Set oPoeme = Objet_Document.createElement("poeme")
  oPoeme.setAttribute "titre", titre

  Objet_CharacterDATA.insertData 0, quatrain_A & saut
  Objet_CharacterDATA.insertData _
                             Objet_CharacterDATA.length, saut
  Objet_CharacterDATA.insertData _
                             Objet_CharacterDATA.length, quatrain_C & saut
  Objet_CharacterDATA.insertData _
                             Objet_CharacterDATA.length, quatrain_D & saut
  Objet_CharacterDATA.insertData _
                             Objet_CharacterDATA.length, quatrain_E

  oAuteur.appendChild oNom
  oDescription.appendChild cDescription
  oAuteur.appendChild oDescription

  oPoeme.appendChild Objet_CharacterDATA
  oOeuvres.appendChild oPoeme
  oAuteur.appendChild oOeuvres
  oNom.appendChild cAuteur

  oPoeme.normalize

  racine.appendChild oAuteur

  Set PI_xml = _
        Objet_Document.createProcessingInstruction("xml", _
                             "version='1.0' encoding='iso-8859-1'")
  Set PI_stylesheet = _
        Objet_Document.createProcessingInstruction("xml-stylesheet", _
                             "type='text/xsl' href='" & fichier_XSL & "'")

  Objet_Document.insertBefore PI_xml, racine
  Objet_Document.insertBefore PI_stylesheet, racine

  Set oCommentaire = _
                   Objet_Document.createComment("Fichier créé le " & date & ".")

  racine.appendChild oCommentaire

  Objet_Document.save Server.MapPath("recueil.xml")

  Response.Write Objet_Document.transformNode(Objet_Style) _
             & "<h4>Le fichier XML est disponible à l'adresse " _
             & " suivante : " & Server.MapPath("recueil.xml") & "</h4>"

  Set Objet_Document = Nothing
  Set Objet_Style = Nothing
%>

2.2.12 / L'objet IXMLDOMComment

L'objet IXMLDOMComment représente le contenu d'un commentaire XML.

Un commentaire peut être créé par l'intermédiaire de la méthode createComment appliquée à l'objet DOMDocument.

Set Objet_Comment = _
                      Objet_Document.createComment(valeur_textuelle)

Un objet IXMLDOMComment peut être ajouté à l'arborescence d'un document XML au moyen de la méthode appendChild ou insertBefore de l'objet IXMLDOMNode.

Objet_Node.appendChild Objet_Comment

Objet_Node.insertBefore(Objet_Comment, Noeud_Frere)

Un noeud commentaire dans un dans un document XML est formée de l'une des façons suivantes :

<!-- Contenu du commentaire -->

<comment> Contenu du commentaire </comment>

L'analyseur XML remarque un commentaire par le double trait d'union (--) et partant ne prend pas en compte le contenu de ce noeud.

Un commentaire se distingue par un type de noeud spécifique, lequel est déterminé par la méthode nodeType ou nodeTypeString retournant respectivement une valeur numérique, ou une chaîne de caractères.

Valeur_numerique = Objet_Node.nodeType
Chaîne = Objet_Node.nodeTypeString
Les Propriétés
Propriété
Description
Chaîne = Objet_Comment.baseName
retourne le nom de base pour le nom qualifié avec l'espace de noms en lecture seule.
Set Objet_NodeList = Objet_Comment.childNodes
contient une liste de noeuds contenant les enfants en lecture seule.
Chaîne = Objet_Comment.data
contient les données du noeud CDATA, en lecture et écriture.
Valeur = Objet_Comment.dataType
indique le type de données pour ce noeud en lecture et écriture.
Set Objet_Node = Objet_Comment.definition
retourne la définition d'un noeud dans le DTD ou le schéma en lecture seule.
Set Objet_Node = Objet_Comment.firstChild
contient le premier enfant de ce noeud en lecture seule.
Set Objet_Node = Objet_Comment.lastChild
retourne le dernier noeud enfant en lecture seule.
Valeur = Objet_Comment.length
spécifie la longueur, en caractères des données, en lecture seule.
Chaîne = Objet_Comment.namespaceURI
retourne l'URI (Uniform Resource Identifier) pour l'espace de noms en lecture seule.
Set Objet_Node = Objet_Comment.nextSibling
contient le frère suivant de ce noeud dans la liste d'enfants des parents en lecture seule.
Chaîne = Objet_Comment.nodeName
contient le nom qualifié de l'élément, l'attribut, la référence d'entité ou une chaîne de caractères fixée pour d'autres types de noeud en lecture seule.
Valeur = Objet_Comment.nodeType
spécifie le type de noeud XML DOM qui détermine des valeurs valides et si le noeud peut avoir des noeuds enfants en lecture seule.
Valeur = Objet_Comment.nodeTypedValue
contient la valeur de ce noeud exprimée dans son type de donnée défini en lecture et écriture.
Chaîne = Objet_Comment.nodeTypeString
retourne le type de noeud dans une forme de chaîne de caractères en lecture seule.
Valeur = Objet_Comment.nodeValue
contient le texte associé avec le noeud en lecture et écriture.
Set Objet_Document = Objet_Comment.ownerDocument
retourne la racine du document qui contient ce noeud en lecture seule.
Set Objet_Node = Objet_Comment.parentNode
contient le noeud parent en lecture seule.
True | False = Objet_Comment.parsed
contient la valeur True si le noeud et tous ses descendants ont été analysées et instanciées, ou False si n'importe quels noeuds restent à être analysées en lecture seule.
Valeur = Objet_Comment.prefix
retourne le préfixe d'espace de noms en lecture seule.
Set Objet_Node = Objet_Comment.previousSibling
contient le frère gauche de ce noeud en lecture seule.
True | False = Objet_Comment.specified
indique si le noeud est explicitement spécifié ou dérivé d'une valeur par défaut dans le DTD ou le schéma en lecture seule.
Chaîne = Objet_Comment.text
contient le contenu textuel du noeud et de sa sous-arborescence en lecture et écriture.
Valeur = Objet_Comment.xml
contient la représentation XML du noeud et de tous ses descendants en lecture seule.
Les Méthodes
Méthode
Description
Set Objet_Node = Objet_Comment.appendChild(Nouvel_Enfant)
ajoute un nouvel enfant comme le dernier enfant de ce noeud.
Objet_Comment.appendData(Chaîne)
ajoute la chaîne de caractères spécifiée aux données textuelles existantes.
Set Objet_Node = Objet_Comment.cloneNode(Bool_Profondeur)
crée un nouveau noeud qui est un double exact de ce noeud.
Objet_Comment.deleteData(Position, Nb_Caractères)
supprime la sous-chaîne de caractères à l'intérieur de données textuelles.
True | False = Objet_Comment.hasChildNodes()
retourne True si le noeud a des enfants.
Set Objet_Node = Objet_Comment.insertBefore(Nouvel_Enfant, Référence)
insère un noeud enfant à la gauche du noeud spécifié ou à la fin de la liste.
Objet_Comment.insertData(Position)
insère la chaîne spécifiée à la position indiquée.
Set Objet_Node = Objet_Comment.removeChild(Noeud_Enfant)
enlève le noeud enfant spécifié de la liste d'enfant et le retourne.
Set Objet_Node =
Objet_Comment.replaceChild(Nouvel_Enfant, Ancien_Enfant)
remplace l'ancien noeud enfant spécifié par le nouveau noeud enfant fourni dans le jeu d'enfants de ce noeud.
Objet_Comment.replaceData(Position, Nb_Caractères, Données)
remplace le nombre de caractères spécifiés par la chaîne de caractères fournie.
Set Objet_NodeList = Objet_Comment.selectNodes(Expression_Pattern)
applique l'opération de mise en correspondance de modèles indiquée au contexte de ce noeud et retourne la liste de noeuds correspondants.
Set Objet_Node = Objet_Comment.selectSingleNode(Chaîne_Requête)
applique l'opération de mise en correspondance de modèles indiquée au contexte de ce noeud et retourne la liste de premier noeud correspondant.
Chaîne = Objet_Comment.substringData(Position, Nb_Caractères)
récupère une sous-chaîne de caractères d'une chaîne complète à l'intervalle spécifié.
Chaîne = Objet_Comment.transformNode(Objet_StyleSheet)
traite ce noeud et ses enfants utilisant la feuille de style de tranformation (XSLT) indiquée et retourne la transformation résultante.
Objet_Comment.transformNodeToObject(Feuille_Style, Objet)
traite ce noeud et ses enfants utilisant la feuille de style de tranformation (XSLT) indiquée et retourne la transformation résultante dans l'objet fourni.
Exemple [voir]
<html>
  <head>
    <%
      Dim Objet_Document, Objet_Comment
      Dim affichage, fichier, trouve
      trouve = false

      Set Objet_Document = Server.CreateObject("MSXML2.DOMDocument")

      Objet_Document.async = false
      fichier = Server.MapPath("fichier.xml")
      Objet_Document.load fichier

      affichage = Visualise_Noeud(Objet_Document)

      Function Visualise_Noeud(Objet_Noeud)
        Dim resultat, nombre, val, val2
        Dim Objet_Node
        Const NODE_COMMENT = 8
        val = "Premier commentaire"
        val2 = "mis à jour"
        resultat = ""

        If Objet_Noeud.nodeType = NODE_COMMENT Then
          trouve = true
          resultat = resultat & "<b style='color: blue; font-weight: bold'>" _
                    & Objet_Noeud.nodeName _
                    & "</b>(" & Objet_Noeud.nodeTypeString & ") : " _
                    & Objet_Noeud.nodeValue & "<br>"
          If Instr(Objet_Noeud.nodeValue, val) Then
            Objet_Noeud.data = "Modifie le " & date
            resultat = resultat & "Commentaire modifie --> "
          ElseIf Instr(Objet_Noeud.nodeValue, val2) Then
            Objet_Noeud.data = "Le fichier a été mis à jour le " & date
            resultat = resultat & "Commentaire modifie --> "
          End If
        End If

        For nombre = 0 To Objet_Noeud.childNodes.length - 1
          Set Objet_Node = Objet_Noeud.childNodes(nombre)
          resultat = resultat & Visualise_Noeud(Objet_Node)
        Next

        Visualise_Noeud = resultat
      End Function

      If trouve = true Then
        Set Objet_Comment = Objet_Document.createComment(" " _
                       & "Le fichier a été mis à jour le " & date)
        Objet_Document.appendChild Objet_Comment
      End If

      Objet_Document.save(Server.MapPath("fichier_modifie.xml"))
    %>
  </head>
  <body>
    <div><%= affichage %></div>
  </body>
</html>

2.2.13 / L'objet IXMLDOMDocumentFragment

L'objet IXMLDOMDocumentFragment est un objet Document allégé qui est utilisable pour des opérations d'insertion.

Un fragment de document est créé par l'intermédiaire de la méthode createDocumentFragment de l'objet DOMDocument.

Set objet_DocumentFragment = _
                        objet_DOMDocument.createDocumentFragment()

L'objet DocumentFragment peut représenter un fragment d'un document ou une portion de l'arborescence d'un document.

Les noeuds DocumentFragment ne doivent pas être des documents obéissant parfaitement aux règles grammaticales de XML, c'est-à-dire qu'ils n'ont pas besoin d'être bien formés. Par exemple, ce noeud peut avoir un seule enfant et que ce dernier peut être un noeud textuel ou bien il peut être composé de zéro à plusieurs noeuds représentant le niveau supérieur de n'importe quelles sous-arborescences définissant la structure du document. En clair, le noeud DocumentFragment peut possèder plusieurs noeuds racines.

<racine>
<comment>
  La portion de l'arborescence en gras 
  représente un fragment de document.
</comment>
  <enfant>
    <petit_enfant>
      ...
    </petit_enfant>
  </enfant>
  <enfant>
    <petit_enfant>
      ...
    </petit_enfant>
  </enfant>
  ...
</racine>

L'objet IXMLDOMDocumentFragment a été spécialement conçu pour effectuer des opérations d'insertion ou d'extraction à partir de l'arborescence d'un document XML.

La méthode appendChild permet d'ajouter un ou plusieurs noeuds dans un fragment de document ou d'ajouter l'objet IXMLDOMDocumentFragment à un noeud élément.

objet_DocumentFragment.appendChild objet_Liste_Noeuds
Objet_Element.appendChild objet_DocumentFragment

L'objet DocumentFragment s'avère très utile lorsque l'utilisateur veut créer des noeuds frères, ainsi, l'objet se comporte comme le parent de ces noeuds afin que l'utilisateur puisse utiliser les méthodes standards de l'objet IXMLNode telles que insertBefore et appendChild.

Set objet_Node = _
   DocumentFragment.insertBefore(Nouvel_Enfant, Noeud_Frère)
Les Propriétés
Propriété
Description
Set Objet_NamedNodeMap = Objet_DocumentFragment.attributes
contient la liste des attributs pour ce noeud en lecture seule.
Chaîne = Objet_DocumentFragment.baseName
retourne le nom de base pour le nom qualifié avec l'espace de noms en lecture seule.
Set Objet_NodeList = Objet_DocumentFragment.childNodes
contient une liste de noeuds contenant les enfants en lecture seule.
Valeur = Objet_DocumentFragment.dataType
indique le type de données pour ce noeud en lecture et écriture.
Set Objet_Node = Objet_DocumentFragment.definition
retourne la définition d'un noeud dans le DTD ou le schéma en lecture seule.
Set Objet_Node = Objet_DocumentFragment.firstChild
contient le premier enfant de ce noeud en lecture seule.
Set Objet_Node = Objet_DocumentFragment.lastChild
contient le dernier noeud enfant en lecture seule.
Chaîne = Objet_DocumentFragment.namespaceURI
retourne l'URI (Uniform Resource Identifier) pour l'espace de noms en lecture seule.
Set Objet_Node = Objet_DocumentFragment.nextSibling
contient le frère suivant de ce noeud dans la liste d'enfants des parents en lecture seule.
Chaîne = Objet_DocumentFragment.nodeName
contient le nom qualifié de l'élément, l'attribut, la référence d'entité ou une chaîne de caractères fixée pour d'autres types de noeud en lecture seule.
Valeur = Objet_DocumentFragment.nodeType
spécifie le type de noeud XML DOM qui détermine des valeurs valides et si le noeud peut avoir des noeuds enfants en lecture seule.
Valeur = Objet_DocumentFragment.nodeTypedValue
contient la valeur de ce noeud exprimée dans son type de donnée défini en lecture et écriture.
Chaîne = Objet_DocumentFragment.nodeTypeString
retourne le type de noeud dans une forme de chaîne de caractères en lecture seule.
Valeur = Objet_DocumentFragment.nodeValue
contient le texte associé avec le noeud en lecture et écriture.
Set Objet_Document = Objet_DocumentFragment.ownerDocument
retourne la racine du document qui contient ce noeud en lecture seule.
Set Objet_Node = Objet_DocumentFragment.parentNode
contient le noeud parent en lecture seule.
True | False = Objet_DocumentFragment.parsed
contient la valeur True si le noeud et tous ses descendants ont été analysées et instanciées, ou False si n'importe quels noeuds restent à être analysées en lecture seule.
Valeur = Objet_DocumentFragment.prefix
retourne le préfixe d'espace de noms en lecture seule.
Set Objet_Node = Objet_DocumentFragment.previousSibling
contient le frère gauche de ce noeud en lecture seule.
True | False = Objet_DocumentFragment.specified
indique si le noeud est explicitement spécifié ou dérivé d'une valeur par défaut dans le DTD ou le schéma en lecture seule.
Chaîne = Objet_DocumentFragment.text
contient le contenu textuel du noeud et de sa sous-arborescence en lecture et écriture.
Valeur = Objet_DocumentFragment.xml
contient la représentation XML du noeud et de tous ses descendants en lecture seule.
Les Méthodes
Méthode
Description
Set Objet_Node = Objet_DocumentFragment.appendChild(Nouvel_Enfant)
ajoute un nouvel enfant comme le dernier enfant de ce noeud.
Set Objet_Node = Objet_DocumentFragment.cloneNode(Bool_Profondeur)
crée un nouveau noeud qui est un double exact de ce noeud.
True | False = Objet_DocumentFragment.hasChildNodes()
retourne True si le noeud a des enfants.
Set Objet_Node =
Objet_DocumentFragment.insertBefore(Nouvel_Enfant, Référence)
insère un noeud enfant à la gauche du noeud spécifié ou à la fin de la liste.
Set Objet_Node = Objet_DocumentFragment.removeChild(Noeud_Enfant)
enlève le noeud enfant spécifié de la liste d'enfant et le retourne.
Set Objet_Node =
Objet_DocumentFragment.replaceChild(Nouvel_Enfant, Ancien_Enfant)
remplace l'ancien noeud enfant spécifié par le nouveau noeud enfant fourni dans le jeu d'enfants de ce noeud.
Set Objet_NodeList =
Objet_DocumentFragment.selectNodes(Expression_Pattern)
applique l'opération de mise en correspondance de modèles indiquée au contexte de ce noeud et retourne la liste de noeuds correspondants.
Set Objet_Node =
Objet_DocumentFragment.selectSingleNode(Chaîne_Requête)
applique l'opération de mise en correspondance de modèles indiquée au contexte de ce noeud et retourne la liste de premier noeud correspondant.
Chaîne = Objet_DocumentFragment.transformNode(Objet_StyleSheet)
traite ce noeud et ses enfants utilisant la feuille de style de tranformation (XSLT) indiquée et retourne la transformation résultante.
Objet_DocumentFragment.transformNodeToObject(Feuille_Style, Objet)
traite ce noeud et ses enfants utilisant la feuille de style de tranformation (XSLT) indiquée et retourne la transformation résultante dans l'objet fourni.
Exemple [voir]
<%
  Const OpenFileForReading = 1

  Dim obj_fso, obj_dom, obj_log, racine
  Dim obj_client, obj_document, obj_protocole, obj_code, obj_methode
  Dim document_txt, protocole_txt, code_txt, methode_txt
  Dim adresse_ip, methode, document, protocole, code, poids
  Dim tableau, elt_adresse, i
  i = 1

  Set obj_fso = Server.CreateObject("Scripting.FileSystemObject")
  fichier = Server.MapPath("fichier_log.txt")
  Set obj_log = obj_fso.OpenTextFile(fichier, OpenFileForReading)

  Set obj_dom = Server.CreateObject("MSXML2.DOMDocument")
  Set racine = obj_dom.createElement("statistique")
  obj_dom.appendChild racine

  Set fragment_client = obj_dom.createDocumentFragment()

  Do While Not obj_log.AtEndOfStream
    ligne = obj_log.ReadLine
    tableau = Split(ligne, " ", -1, 1)
    elt_adresse = Split(tableau(3), ",", -1, 1)

    adresse_ip = tableau(0)
    methode = Right(elt_adresse(0), Len(elt_adresse(0)) - 1)
    document = elt_adresse(1)
    protocole = Left(elt_adresse(2), Len(elt_adresse(2)) - 1)
    code = tableau(4)
    poids = tableau(5)

    Set obj_client = obj_dom.createElement("client")
    obj_client.setAttribute "adresse_ip", adresse_ip

    Set obj_document = obj_dom.createElement("document")
    Set document_txt = obj_dom.createTextNode(document)
    obj_document.setAttribute "poids", poids

    Set obj_protocole = obj_dom.createElement("protocole")
    Set protocole_txt = obj_dom.createTextNode(protocole)

    Set obj_code = obj_dom.createElement("code")
    Set code_txt = obj_dom.createTextNode(code)

    Set obj_methode = obj_dom.createElement("methode")
    Set methode_txt = obj_dom.createTextNode(methode)

    obj_document.appendChild document_txt
    obj_protocole.appendChild protocole_txt
    obj_code.appendChild code_txt
    obj_methode.appendChild methode_txt

    obj_client.appendChild obj_document

    obj_client.insertBefore obj_protocole, obj_client.childNodes.item(1)
    obj_client.insertBefore obj_code, obj_client.childNodes.item(2)
    obj_client.insertBefore obj_methode, obj_client.childNodes.item(3)

    fragment_client.appendChild obj_client

    racine.appendChild fragment_client

    i = i + 1
  Loop

  obj_dom.save(Server.MapPath("fichier_log.xml"))

  Response.Write "Le fichier de statistique au format XML" _
                         & " est disponible à l'adresse suivante :<br>" _
                         & Server.MapPath("fichier_log.xml")

  obj_log.close
  Set obj_log = Nothing
%>

2.2.14 / L'objet IXMLDOMDocumentType

L'objet IXMLDOMDocumentType contient les informations associées à la déclaration de type de document.

<!DOCTYPE Elément_Racine ... >

Chaque objet DOMDocument inclut une DTD qui identifie l'objet IXMLDOMDocumentType du document.

L'objet IXMLDOMDocumentType fournit un accès à la liste d'entités et de notations définies pour le document. Les propriétés entities et notations retournent des objets IXMLDOMNamedNodeMap représentant respectivement une collection d'objets IXMLDOMEntity et IXMLDOMNotation.

Set Collection_Entites = Objet_DocumentType.entities

Set Collection_Notations = Objet_DocumentType.notations

Un objet IXMLDOMDocumentType est remarqué dans l'arborescence d'un document XML par un type de noeud précis, en l'occurrence par la valeur numérique 10 ou la chaîne de caractères documenttype retournée respectivement par la propriété nodeType et nodeTypeString.

Valeur_numérique = Objet_DocumentType.nodeType
Chaîne = Objet_DocumentType.nodeTypeString
Les Propriétés
Propriété
Description
Chaîne = Objet_DocumentType.baseName
retourne le nom de base pour le nom qualifié avec l'espace de noms en lecture seule.
Set Objet_NodeList = Objet_DocumentType.childNodes
contient une liste de noeuds contenant les enfants en lecture seule.
Valeur = Objet_DocumentType.dataType
indique le type de données pour ce noeud en lecture et écriture.
Set Objet_Node = Objet_DocumentType.definition
retourne la définition d'un noeud dans le DTD ou le schéma en lecture seule.
Set Objet_NamedNodeMap = Objet_DocumentType.entities
contient une liste d'entités externes et internes qui sont déclarées dans le DTD, en lecture seule.
Set Objet_Node = Objet_DocumentType.firstChild
contient le premier enfant de ce noeud en lecture seule.
Set Objet_Node = Objet_DocumentType.lastChild
contient le dernier noeud enfant en lecture seule.
Chaîne = Objet_DocumentType.name
contient le nom du DTD, en lecture seule.
Chaîne = Objet_DocumentType.namespaceURI
retourne l'URI (Uniform Resource Identifier) pour l'espace de noms en lecture seule.
Set Objet_Node = Objet_DocumentType.nextSibling
contient le frère suivant de ce noeud dans la liste d'enfants des parents en lecture seule.
Chaîne = Objet_DocumentType.nodeName
contient le nom qualifié de l'élément, l'attribut, la référence d'entité ou une chaîne de caractères fixée pour d'autres types de noeud en lecture seule.
Valeur = Objet_DocumentType.nodeType
spécifie le type de noeud XML DOM qui détermine des valeurs valides et si le noeud peut avoir des noeuds enfants en lecture seule.
Objet_Valeur = Objet_DocumentType.nodeTypedValue
contient la valeur de ce noeud exprimée dans son type de donnée défini en lecture et écriture.
Chaîne = Objet_DocumentType.nodeTypeString
retourne le type de noeud dans une forme de chaîne de caractères en lecture seule.
Valeur = Objet_DocumentType.nodeValue
contient le texte associé avec le noeud en lecture et écriture.
Set Objet_NamedNodeMap = Objet_DocumentType.notations
contient une liste d'objets IXMLDOMNotation présents dans le DTD, en lecture seule.
Set Objet_Document = Objet_DocumentType.ownerDocument
retourne la racine du document qui contient ce noeud en lecture seule.
Set Objet_Node = Objet_DocumentType.parentNode
contient le noeud parent en lecture seule.
True | False = Objet_DocumentType.parsed
contient la valeur True si le noeud et tous ses descendants ont été analysées et instanciées, ou False si n'importe quels noeuds restent à être analysées en lecture seule.
Valeur = Objet_DocumentType.prefix
retourne le préfixe d'espace de noms en lecture seule.
Set Objet_Node = Objet_DocumentType.previousSibling
contient le frère gauche de ce noeud en lecture seule.
True | False = Objet_DocumentType.specified
indique si le noeud est explicitement spécifié ou dérivé d'une valeur par défaut dans le DTD ou le schéma en lecture seule.
Chaîne = Objet_DocumentType.text
contient le contenu textuel du noeud et de sa sous-arborescence en lecture et écriture.
Valeur = Objet_DocumentType.xml
contient la représentation XML du noeud et de tous ses descendants en lecture seule.
Les Méthodes
Méthode
Description
Set Objet_Node = Objet_DocumentType.appendChild(Nouvel_Enfant)
ajoute un nouvel enfant comme le dernier enfant de ce noeud.
Set Objet_Node = Objet_DocumentType.cloneNode(Bool_Profondeur)
crée un nouveau noeud qui est un double exact de ce noeud.
True | False = Objet_DocumentType.hasChildNodes()
retourne True si le noeud a des enfants.
Set Objet_Node =
Objet_DocumentType.insertBefore(Nouvel_Enfant, Référence)
insère un noeud enfant à la gauche du noeud spécifié ou à la fin de la liste.
Set Objet_Node = Objet_DocumentType.removeChild(Noeud_Enfant)
enlève le noeud enfant spécifié de la liste d'enfant et le retourne.
Set Objet_Node =
Objet_DocumentType.replaceChild(Nouvel_Enfant, Ancien_Enfant)
remplace l'ancien noeud enfant spécifié par le nouveau noeud enfant fourni dans le jeu d'enfants de ce noeud.
Set Objet_NodeList =
Objet_DocumentType.selectNodes(Expression_Pattern)
applique l'opération de mise en correspondance de modèles indiquée au contexte de ce noeud et retourne la liste de noeuds correspondants.
Set Objet_Node =
Objet_DocumentType.selectSingleNode(Chaîne_Requête)
applique l'opération de mise en correspondance de modèles indiquée au contexte de ce noeud et retourne la liste de premier noeud correspondant.
Chaîne = Objet_DocumentType.transformNode(Objet_StyleSheet)
traite ce noeud et ses enfants utilisant la feuille de style de tranformation (XSLT) indiquée et retourne la transformation résultante.
Objet_DocumentType.transformNodeToObject(Feuille_Style, Objet)
traite ce noeud et ses enfants utilisant la feuille de style de tranformation (XSLT) indiquée et retourne la transformation résultante dans l'objet fourni.
Exemple [voir]
<html>
  <body>
    <%
      Const NODE_DOCUMENT_TYPE = 10
      Dim Objet_Document, Noeud, fichier
      Dim affichage, resultat, i
      Dim Collection_Entites, Collection_Notations

      Set Objet_Document = Server.CreateObject("MSXML2.DOMDocument.4.0")

      Objet_Document.async = false
      fichier = Server.MapPath("logitheque.xml")
      Objet_Document.load fichier

      For Each Noeud In Objet_Document.childNodes
        If Noeud.nodeType = NODE_DOCUMENT_TYPE Then
          Set Collection_Entites = Noeud.entities
          Set Collection_Notations = Noeud.notations

          resultat = resultat & "<h2>" & Noeud.nodeName & " ( " _
                     & Noeud.nodeTypeString & " )</h2>" _
                     & "<h3>Nombre total d'entités : " _
                     & Collection_Entites.length & "</h3>" _
                     & "<h3>Nombre total de notations : " _
                     & Collection_Notations.length & "</h3><hr>"

          resultat = resultat & "<table><tr><th>Entités</th>" _
                          & "<th>Notations</th></tr><tr><td valign='top'>"

          For i = 0 To Collection_Entites.length - 1
            resultat = resultat & "<b style='color: blue; font-weight: bold'>" _
                     & Collection_Entites.item(i).nodeName & "</b> (" _
                     & Collection_Entites.item(i).nodeTypeString _
                     & ") = <b " & "style='font-size: 14pt'>" _
                     & Collection_Entites.item(i).text & "</b><br>"
          Next

          resultat = resultat & "</td><td valign='top'>"

          For i = 0 To Collection_Notations.length - 1
            resultat = resultat & "<b style='color: blue; font-weight: bold'>" _
                     & Collection_Notations.item(i).nodeName _
                     & "</b> (" & Collection_Notations.item(i).nodeTypeString & ") " _
                     & "<b style='color:red'>[ SystemID = '" _
                     & Collection_Notations.item(i).systemID & "' - PublicID = '" _
                     & Collection_Notations.item(i).publicID & "' ]</b><br>"
          Next

          resultat = resultat & "</td></tr></table>"

        End If
      Next

      Response.Write resultat
    %>
  </body>
</html>

2.2.15 / L'objet IXMLDOMElement

L'objet IXMLDOMElement représente l'objet élément dans l'arborescence d'un document XML.

Un objet élément est créé par l'intermédiaire de la méthode createElement appliquée à l'objet DOMDocument.

Objet_DOMElement = _
                    objet_DOMDocument.createElement(nom_element)

Les noeuds éléments sont parmi les objets les plus communs dans l'arborescence d'un document XML.

Ils peuvent possèder des attributs qui ne sont pas définis comme des noeuds enfants d'un élément et ne sont pas considérés comme étant une partie de l'arborescence d'un document XML.

Les noeuds éléments peuvent contenir d'autres noeuds éléments, du texte, ou être vide.

L'affectation d'un élément à un objet IXMLDOMElement parent s'effectue au moyen de la méthode appendChild.

NouedElement_Recepteur.appendChild(Noeud_Affecté)

L'insertion d'une valeur textuelle à l'intérieur des marqueurs d'un objet IXMLDOMElement doit passer par la création d'un noeud textuel (createTextNode), puis de l'affectation (appendChild)de ce dernier à l'élément récepteur.

Set Noeud_Texte = obj_DOMDocument.createTextNode(valeur)
Noued_Element.appendChild(Noeud_Texte)

Les attributs sont affectés à un élément par l'intermédiaire de la méthode setAttributeNode ou setAttribute de l'objet IXMLDOMElement.

objet_DOMElement.setAttribute nom_attribut, valeur_attribut

Set Noeud_attribut = _
                      obj_DOMDocument.createAttribute(nom_attribut)
Set valeur_attribut = obj_DOMDocument.createTextNode(valeur)
Noeud_attribut.appendChild valeur_attribut
objet_DOMElement.setAttributeNode(Noeud_attribut)

En conséquence, l'objet IXMLDOMElement fournit des méthodes permettant de gérer facilement les attributs, en incluant les méthodes pour associer un attribut à un élément, pour récupérer un objet attribut et sa valeur ou encore pour les supprimer.

Valeur = objet_DOMElement.getAttribute(Nom)

Set Objet_Attribut = objet_DOMElement.getAttributeNode(Nom)

objet_DOMElement.removeAttribute(Nom)

Pour récupérer le jeu d'attributs associé à un élément, il est possible d'appeler la propriété attributes qui retourne une collection d'objet IXMLDOMNamedNodeMap contenant tous les éléments attributs.

Set Liste_Attributs = Objet_DOMElement.attributes
Les Propriétés
Propriété
Description
Set Objet_NamedNodeMap = Objet_DOMElement.attributes
contient la liste des attributs pour ce noeud en lecture seule.
Chaîne = Objet_DOMElement.baseName
retourne le nom de base pour le nom qualifié avec l'espace de noms en lecture seule.
Set Objet_NodeList = Objet_DOMElement.childNodes
contient une liste de noeuds contenant les enfants en lecture seule.
Valeur = Objet_DOMElement.dataType
indique le type de données pour ce noeud en lecture et écriture.
Set Objet_Node = Objet_DOMElement.definition
retourne la définition d'un noeud dans le DTD ou le schéma en lecture seule.
Set Objet_Node = Objet_DOMElement.firstChild
contient le premier enfant de ce noeud en lecture seule.
Set Objet_Node = Objet_DOMElement.lastChild
retourne le dernier noeud enfant en lecture seule.
Chaîne = Objet_DOMElement.namespaceURI
retourne l'URI (Uniform Resource Identifier) pour l'espace de noms en lecture seule.
Set Objet_Node = Objet_DOMElement.nextSibling
contient le frère suivant de ce noeud dans la liste d'enfants des parents en lecture seule.
Chaîne = Objet_DOMElement.nodeName
contient le nom qualifié de l'élément, l'attribut, la référence d'entité ou une chaîne de caractères fixée pour d'autres types de noeud en lecture seule.
Valeur = Objet_DOMElement.nodeType
spécifie le type de noeud XML DOM qui détermine des valeurs valides et si le noeud peut avoir des noeuds enfants en lecture seule.
Chaîne = Objet_DOMElement.nodeTypeString
retourne le type de noeud dans une forme de chaîne de caractères en lecture seule.
Valeur = Objet_DOMElement.nodeValue
contient le texte associé avec le noeud en lecture et écriture.
Set Objet_Document = Objet_DOMElement.ownerDocument
retourne la racine du document qui contient ce noeud en lecture seule.
Set Objet_Node = Objet_DOMElement.parentNode
contient le noeud parent en lecture seule.
True | False = Objet_DOMElement.parsed
contient la valeur True si le noeud et tous ses descendants ont été analysées et instanciées, ou False si n'importe quels noeuds restent à être analysées en lecture seule.
Valeur = Objet_DOMElement.prefix
retourne le préfixe d'espace de noms en lecture seule.
set Objet_Node = Objet_DOMElement.previousSibling
contient le frère gauche de ce noeud en lecture seule.
True | False = Objet_DOMElement.specified
indique si le noeud est explicitement spécifié ou dérivé d'une valeur par défaut dans le DTD ou le schéma en lecture seule.
Chaîne = Objet_DOMElement.tagName
contient le nom de l'élément, en lecture seule.
Chaîne = Objet_DOMElement.text
contient le contenu textuel du noeud et de sa sous-arborescence en lecture et écriture.
Valeur = Objet_DOMElement.xml
contient la représentation XML du noeud et de tous ses descendants en lecture seule.
Les Méthodes
Méthode
Description
Set Objet_Noeud = Objet_DOMElement.appendChild(Nouvel_Enfant)
ajoute un nouvel enfant comme le dernier enfant de ce noeud.
Set Objet_Noeud = Objet_DOMElement.cloneNode(Bool_Profondeur)
crée un nouveau noeud qui est un double exact de ce noeud.
Valeur = Objet_DOMElement.getAttribute(Nom)
retourne la valeur de l'attribut nommé.
Set Objet_Attribute = Objet_DOMElement.getAttributeNode(Nom)
retourne le noeud de l'attribut nommé.
Set Objet_ListeNoeud = Objet_DOMElement.getElementsByTagName(Nom)
retourne une collection d'éléments qui porteront le nom indiqué.
True | False = Objet_DOMElement.hasChildNodes()
retourne True si le noeud a des enfants.
Set Objet_Noeud =
Objet_DOMElement.insertBefore(Nouvel_Enfant, Référence)
insère un noeud enfant à la gauche du noeud spécifié ou à la fin de la liste.
Objet_DOMElement.normalize
normalise tous les éléments descendants et combine deux ou plusieurs noeuds textuels adjacents à l'intérieur d'un noeud textuel unifié.
Objet_DOMElement.removeAttribute(Nom)
enlève ou remplace les attributs nommés.
Set Objet_Attribute =
Objet_DOMElement.removeAttributeNode(Objet_Attribute)
enlève l'attribut spécifié à partir de l'élément.
Set Objet_Noeud = Objet_DOMElement.removeChild(Noeud_Enfant)
enlève le noeud enfant spécifié de la liste d'enfant et le retourne.
Set Objet_Noeud =
Objet_DOMElement.replaceChild(Nouvel_Enfant, Ancien_Enfant)
remplace l'ancien noeud enfant spécifié par le nouveau noeud enfant fourni dans le jeu d'enfants de ce noeud.
Set Objet_ListeNoeud =
Objet_DOMElement.selectNodes(Expression_Pattern)
applique l'opération de mise en correspondance de modèles indiquée au contexte de ce noeud et retourne la liste de noeuds correspondants.
Set Objet_Noeud = Objet_DOMElement.selectSingleNode(Chaîne_Requête)
applique l'opération de mise en correspondance de modèles indiquée au contexte de ce noeud et retourne la liste de premier noeud correspondant.
Objet_DOMElement.setAttribute(Nom, Valeur)
attribue la valeur de l'attribut nommé.
Set Objet_Attribute = Objet_DOMElement.setAttributeNode(Objet_Attribute)
ajoute ou modifie le noeud d'attribut fourni de l'élément.
valeur_chaine = Objet_DOMElement.transformNode(Objet_StyleSheet)
traite ce noeud et ses enfants utilisant la feuille de style de tranformation (XSLT) indiquée et retourne la transformation résultante.
Objet_DOMElement.transformNodeToObject(Feuille_Style, Objet)
traite ce noeud et ses enfants utilisant la feuille de style de tranformation (XSLT) indiquée et retourne la transformation résultante dans l'objet fourni.
Exemple [voir]
<%
  Const OpenFileForReading = 1

  Dim obj_fso, obj_dom, obj_log, racine
  Dim obj_client, obj_document, obj_protocole, obj_code, obj_methode
  Dim document_txt, protocole_txt, code_txt, methode_txt
  Dim adresse_ip, methode, document, protocole, code, poids
  Dim tableau, elt_adresse, i
  i = 1

  Set obj_fso = Server.CreateObject("Scripting.FileSystemObject")
  fichier = Server.MapPath("fichier_log.txt")
  Set obj_log = obj_fso.OpenTextFile(fichier, OpenFileForReading)

  Set obj_dom = Server.CreateObject("MSXML2.DOMDocument")
  Set racine = obj_dom.createElement("statistique")
  obj_dom.appendChild racine

  Do While Not obj_log.AtEndOfStream
    ligne = obj_log.ReadLine
    tableau = Split(ligne, " ", -1, 1)
    elt_adresse = Split(tableau(3), ",", -1, 1)

    adresse_ip = tableau(0)
    methode = Right(elt_adresse(0), Len(elt_adresse(0)) - 1)
    document = elt_adresse(1)
    protocole = Left(elt_adresse(2), Len(elt_adresse(2)) - 1)
    code = tableau(4)
    poids = tableau(5)

    Set obj_client = obj_dom.createElement("client")
    obj_client.setAttribute "adresse_ip", adresse_ip

    Set obj_document = obj_dom.createElement("document")
    Set document_txt = obj_dom.createTextNode(document)
    Set poids_attr = obj_dom.createAttribute("poids")
    Set poids_txt = obj_dom.createTextNode(poids)
    obj_document.setAttributeNode(poids_attr)

    Set obj_protocole = obj_dom.createElement("protocole")
    Set protocole_txt = obj_dom.createTextNode(protocole)

    Set obj_code = obj_dom.createElement("code")
    Set code_txt = obj_dom.createTextNode(code)

    Set obj_methode = obj_dom.createElement("methode")
    Set methode_txt = obj_dom.createTextNode(methode)

    poids_attr.appendChild poids_txt

    obj_document.appendChild document_txt
    obj_protocole.appendChild protocole_txt
    obj_code.appendChild code_txt
    obj_methode.appendChild methode_txt

    obj_client.appendChild obj_document
    obj_client.appendChild obj_protocole
    obj_client.appendChild obj_code
    obj_client.appendChild obj_methode

    racine.appendChild obj_client

    i = i + 1
  Loop

  obj_dom.save(Server.MapPath("fichier_log.xml"))

  obj_log.close
  Set obj_log = Nothing
%>

2.2.16 / L'objet IXMLDOMEntity

L'objet IXMLDOMEntity représente une entité analysé ou non-analysée dans le document XML.

<!ENTITY nom_entité ... >

L'objet IXMLDOMEntity représente l'entité elle-même et non pas la déclaration d'entité. Le DOM élaboré par le W3C (Worldwide Web Consortium) ne définit actuellement pas un objet modèlisant une déclaration d'entité.

En accord avec les spécifications du W3C, un analyseur XML peut développer complètement les références d'entité avant que le modèle de structure soit passé au Document Object Model, dans ce cas il n'y aura aucun noeud EntityReference dans l'arborescence du document. Lorsque ces références d'entités sont développées, l'arborescence du document ne contient pas n'importe quelles références d'entités.

XML ne contrôle pas qu'un processeur non-validant lit et prépare les déclarations d'entités créés dans un sous-ensemble externe ou déclarées dans des entités paramètres externes. Cela signifie que les entités analysées déclarées dans le sous-ensemble externe n'ont pas besoin être développées par plusieurs classes des applications et que la valeur de remplacement de l'entité peut ne pas être disponible. Lorsque la valeur de remplacement est disponible le noeud Entity correspondant de la liste d'enfant représente la structure de cette sustitution de texte, sinon, la liste d'enfant est vide.

Lorsque l'analyseur XML de Microsoft valide le document XML, il développe les entités externes à l'exception des entités binaires. Les noeuds représentant les entités développés comme les enfants en lecture seule de la référence d'entité. L'application de Microsoft ne développe pas ces entités lorsqu'elle n'est pas validante.

La structure de la liste d'enfant de l'entité est exactement la même que la structure de la liste d'enfant pour l'objet IXMLDOMEntityReference avec la même valeur de noeud.

La liste des entités dans une DTD peut être récupérée par l'intermédiaire de la propriété entities appliquées à un objet IXMLDOMDocumentype.

Set Collection_Entities = Objet_DocumenType.entities

Un objet IXMLDOMEntity est identifié par un type de noeud spécifique, en l'occurrence les propriétés nodeType et nodeTypeString appliquée à cet objet retournent respectivement la valeur numérique 6 et la chaîne de caractères entity.

Valeur_numérique = Objet_Entity.nodeType
Chaîne = Objet_Entity.nodeTypeString
Les Propriétés
Propriété
Description
Chaîne = Objet_Entity.baseName
retourne le nom de base pour le nom qualifié avec l'espace de noms en lecture seule.
Set Objet_NodeList = Objet_Entity.childNodes
contient une liste de noeuds contenant les enfants en lecture seule.
Valeur = Objet_Entity.dataType
indique le type de données pour ce noeud en lecture et écriture.
Set Objet_Node = Objet_Entity.definition
retourne la définition d'un noeud dans le DTD ou le schéma en lecture seule.
Set Objet_Node = Objet_Entity.firstChild
contient le premier enfant de ce noeud en lecture seule.
Set Objet_Node = Objet_Entity.lastChild
contient le dernier noeud enfant en lecture seule.
Chaîne = Objet_Entity.namespaceURI
retourne l'URI (Uniform Resource Identifier) pour l'espace de noms en lecture seule.
Set Objet_Node = Objet_Entity.nextSibling
contient le frère suivant de ce noeud dans la liste d'enfants des parents en lecture seule.
Chaîne = Objet_Entity.nodeName
contient le nom qualifié de la référence d'entité, en lecture seule.
Valeur = Objet_Entity.nodeType
spécifie le type de noeud XML DOM qui détermine des valeurs valides et si le noeud peut avoir des noeuds enfants en lecture seule.
Objet_Valeur = Objet_Entity.nodeTypedValue
contient la valeur de ce noeud exprimée dans son type de donnée défini en lecture et écriture.
Chaîne = Objet_Entity.nodeTypeString
retourne le type de noeud dans une forme de chaîne de caractères en lecture seule.
Valeur = Objet_Entity.nodeValue
contient le texte associé avec le noeud en lecture et écriture.
Chaîne = Objet_Entity.notationName
contient le nom de la notation, en lecture seule.
Set Objet_Document = Objet_Entity.ownerDocument
retourne la racine du document qui contient ce noeud en lecture seule.
Set Objet_Node = Objet_Entity.parentNode
contient le noeud parent en lecture seule.
True | False = Objet_Entity.parsed
contient la valeur True si le noeud et tous ses descendants ont été analysées et instanciées, ou False si n'importe quels noeuds restent à être analysées en lecture seule.
Valeur = Objet_Entity.prefix
retourne le préfixe d'espace de noms en lecture seule.
Set Objet_Node = Objet_Entity.previousSibling
contient le frère gauche de ce noeud en lecture seule.
Chaîne = Objet_Entity.publicId
contient l'identificateur public associé avec l'entité, en lecture seule.
True | False = Objet_Entity.specified
indique si le noeud est explicitement spécifié ou dérivé d'une valeur par défaut dans le DTD ou le schéma en lecture seule.
Chaîne = Objet_Entity.systemId
contient l'identificateur système associé à l'entité en lecture seule.
Chaîne = Objet_Entity.text
contient le contenu textuel du noeud et de sa sous-arborescence en lecture et écriture.
Valeur = Objet_Entity.xml
contient la représentation XML du noeud et de tous ses descendants en lecture seule.
Les Méthodes
Méthode
Description
Set Objet_Node = Objet_Entity.appendChild(Nouvel_Enfant)
ajoute un nouvel enfant comme le dernier enfant de ce noeud.
Set Objet_Node = Objet_Entity.cloneNode(Bool_Profondeur)
crée un nouveau noeud qui est un double exact de ce noeud.
True | False = Objet_Entity.hasChildNodes()
retourne True si le noeud a des enfants.
Set Objet_Node = Objet_Entity.insertBefore(Nouvel_Enfant, Référence)
insère un noeud enfant à la gauche du noeud spécifié ou à la fin de la liste.
Set Objet_Node = Objet_Entity.removeChild(Noeud_Enfant)
enlève le noeud enfant spécifié de la liste d'enfant et le retourne.
Set Objet_NodeList = Objet_Entity.replaceChild(Nouvel_Enfant, Ancien_Enfant)
remplace l'ancien noeud enfant spécifié par le nouveau noeud enfant fourni dans le jeu d'enfants de ce noeud.
Set Objet_Node = Objet_Entity.selectNodes(Expression_Pattern)
applique l'opération de mise en correspondance de modèles indiquée au contexte de ce noeud et retourne la liste de noeuds correspondants.
Set Objet_Node = Objet_Entity.selectSingleNode(Chaîne_Requête)
applique l'opération de mise en correspondance de modèles indiquée au contexte de ce noeud et retourne la liste de premier noeud correspondant.
Chaîne = Objet_Entity.transformNode(Objet_StyleSheet)
traite ce noeud et ses enfants utilisant la feuille de style de tranformation (XSLT) indiquée et retourne la transformation résultante.
Objet_Entity.transformNodeToObject(Feuille_Style, Objet)
traite ce noeud et ses enfants utilisant la feuille de style de tranformation (XSLT) indiquée et retourne la transformation résultante dans l'objet fourni.
Exemple [voir]
<html>
  <head>
    <%
      Dim Objet_Document, fichier
      Dim affichage

      Set Objet_Document = Server.CreateObject("MSXML2.DOMDocument")

      Objet_Document.async = false
      fichier = Server.MapPath("logitheque.xml")
      Objet_Document.load fichier

      affichage = Visualise_Noeud(Objet_Document)

      Function Visualise_Noeud(Objet_Noeud)
        Const NODE_ENTITY = 6
        Const NODE_DOCUMENT_TYPE = 10
        Dim resultat, i, nombre, nb_noeuds, Objet_Node, Objet_NamedNodeMap
        resultat = ""

        If Objet_Noeud.nodeType = NODE_DOCUMENT_TYPE Then
          Set Objet_NamedNodeMap = Objet_Noeud.entities
          resultat = resultat & "<h2>" & Objet_Noeud.nodeName & " ( " _
                    & Objet_Noeud.nodeTypeString & " )</h2>" _
                    & "<h3>Nombre total d'entités : " _
                    & Objet_NamedNodeMap.length & "</h3><hr>"
        End If

        If Objet_Noeud.nodeType = NODE_ENTITY Then
          resultat = resultat & "<b style='color: blue; font-weight: bold'>" _
                  & Objet_Noeud.nodeName _
                  & "</b> (" & Objet_Noeud.nodeTypeString & ") = <b " _
                  & "style='font-size: 14pt'>" & Objet_Noeud.text & "</b><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)
        Next

        Visualise_Noeud = resultat
      End Function
    %>
  </head>
  <body>
    <div><%= affichage %></div>
  </body>
</html>

2.2.17 / L'objet IXMLDOMEntityReference

L'objet IXMLDOMEntityReference représente un noeud de référence d'entité.

&reference_entite;

Une référence d'entité peut être créée par l'intermédiaire de la méthode createEntityReference appliquée à l'objet DOMDOcument.

Set Objet_EntityReference = _
          Objet_Document.createEntityReference(nom_entité)

Un objet IXMLDOMEntityReference est identifié par un type de noeud spécifique, en l'occurrence les propriétés nodeType et nodeTypeString appliquée à cet objet retournent respectivement la valeur numérique 5 et la chaîne de caractères entityreference.

Valeur_numérique = Objet_EntityReference.nodeType
Chaîne = Objet_EntityReference.nodeTypeString

Si l'analyseur XML développe les références d'entité au moment de la construction du modèle de structure, aucun objet EntityReference n'apparaît dans l'arborescence du document XML.

XML ne requiert pas de processeurs non-validant pour manipuler les déclarations d'entités externes créées dans un sous-ensemble externe ou déclarées dans des entités paramètres externes. En fait, les entités analysées déclarées dans le sous-ensemble externe n'ont pas besoin d'être développées, et donc la valeur de remplacement de l'entité peut ne pas être disponible. Si la valeur de remplacement est disponible, alors la valeur de la référence d'entité apparaît dans la liste d'enfant de l'objet EntityReference.

Les objets EntityReference peuvent être insérés à l'intérieur du modèle de structure lorsqu'une référence entité est dans le document source.

Les références de caractère et des références d'entités prédédéfinies sont considérées, afin d'être développées par le processeur HTML ou XML, de telle sorte que les caractères soient représentés par leur équivalent Unicode plutôt que par une référence d'entité.

De plus, le processeur XML peut développer complètement les références d'entités au moment de la construction du modèle de structure à la place des objets EntityReference fournis. S'il fournit de tels objets, alors pour un noeud EntityReference donné, il peut être qu'il n'y a pas de noeud d'entité représentant l'entité référencée. Si une telle entité existe, alors la sous-arborescence du noeud EntityReference est en générale une copie de la sous-arborescence du noeud Entity.

Toutefois, L'objet Entity peut ne pas être vrai lorsqu'une entité contient un préfixe d'espace de noms sans lien. Dans une telle situation, car la résolution du préfixe d'espace de noms dépend de la localisation de la référence d'entité, les descendants de l'objet EntityReference peuvent être liés aux adresses URI de l'espace de noms.

Les Propriétés
Propriété
Description
Chaîne = Objet_EntityReference.baseName
retourne le nom de base pour le nom qualifié avec l'espace de noms en lecture seule.
Set Objet_NodeList = Objet_EntityReference.childNodes
contient une liste de noeuds contenant les enfants en lecture seule.
Valeur = Objet_EntityReference.dataType
indique le type de données pour ce noeud en lecture et écriture.
Set Objet_Node = Objet_EntityReference.definition
retourne la définition d'un noeud dans le DTD ou le schéma en lecture seule.
Set Objet_Node = Objet_EntityReference.firstChild
contient le premier enfant de ce noeud en lecture seule.
Set Objet_Node = Objet_EntityReference.lastChild
contient le dernier noeud enfant en lecture seule.
Chaîne = Objet_EntityReference.namespaceURI
retourne l'URI (Uniform Resource Identifier) pour l'espace de noms en lecture seule.
Set Objet_Node = Objet_EntityReference.nextSibling
contient le frère suivant de ce noeud dans la liste d'enfants des parents en lecture seule.
Chaîne = Objet_EntityReference.nodeName
contient le nom qualifié de l'élément, l'attribut, la référence d'entité ou une chaîne de caractères fixée pour d'autres types de noeud en lecture seule.
Valeur = Objet_EntityReference.nodeType
spécifie le type de noeud XML DOM qui détermine des valeurs valides et si le noeud peut avoir des noeuds enfants en lecture seule.
Objet_Valeur = Objet_EntityReference.nodeTypedValue
contient la valeur de ce noeud exprimée dans son type de donnée défini en lecture et écriture.
Chaîne = Objet_EntityReference.nodeTypeString
retourne le type de noeud dans une forme de chaîne de caractères en lecture seule.
Valeur = Objet_EntityReference.nodeValue
contient le texte associé avec le noeud en lecture et écriture.
Set Objet_Document = Objet_EntityReference.ownerDocument
retourne la racine du document qui contient ce noeud en lecture seule.
Set Objet_Node = Objet_EntityReference.parentNode
contient le noeud parent en lecture seule.
True | False = Objet_EntityReference.parsed
contient la valeur True si le noeud et tous ses descendants ont été analysées et instanciées, ou False si n'importe quels noeuds restent à être analysées en lecture seule.
Valeur = Objet_EntityReference.prefix
retourne le préfixe d'espace de noms en lecture seule.
Set Objet_Node = Objet_EntityReference.previousSibling
contient le frère gauche de ce noeud en lecture seule.
True | False = Objet_EntityReference.specified
indique si le noeud est explicitement spécifié ou dérivé d'une valeur par défaut dans le DTD ou le schéma en lecture seule.
Chaîne = Objet_EntityReference.text
contient le contenu textuel du noeud et de sa sous-arborescence en lecture et écriture.
Valeur = Objet_EntityReference.xml
contient la représentation XML du noeud et de tous ses descendants en lecture seule.
Les Méthodes
Méthode
Description
Set Objet_Node = Objet_EntityReference.appendChild(Nouvel_Enfant)
ajoute un nouvel enfant comme le dernier enfant de ce noeud.
Set Objet_Node = Objet_EntityReference.cloneNode(Bool_Profondeur)
crée un nouveau noeud qui est un double exact de ce noeud.
True | False = Objet_EntityReference.hasChildNodes()
retourne True si le noeud a des enfants.
Set Objet_Node =
Objet_EntityReference.insertBefore(Nouvel_Enfant, Référence)
insère un noeud enfant à la gauche du noeud spécifié ou à la fin de la liste.
Set Objet_Node = Objet_EntityReference.removeChild(Noeud_Enfant)
enlève le noeud enfant spécifié de la liste d'enfant et le retourne.
Set Objet_Node =
Objet_EntityReference.replaceChild(Nouvel_Enfant, Ancien_Enfant)
remplace l'ancien noeud enfant spécifié par le nouveau noeud enfant fourni dans le jeu d'enfants de ce noeud.
Set Objet_NodeList = Objet_EntityReference.selectNodes(Expression_Pattern)
applique l'opération de mise en correspondance de modèles indiquée au contexte de ce noeud et retourne la liste de noeuds correspondants.
Set Objet_Node = Objet_EntityReference.selectSingleNode(Chaîne_Requête)
applique l'opération de mise en correspondance de modèles indiquée au contexte de ce noeud et retourne la liste de premier noeud correspondant.
Chaîne = Objet_EntityReference.transformNode(Objet_StyleSheet)
traite ce noeud et ses enfants utilisant la feuille de style de tranformation (XSLT) indiquée et retourne la transformation résultante.
Objet_EntityReference.transformNodeToObject(Feuille_Style, Objet)
traite ce noeud et ses enfants utilisant la feuille de style de tranformation (XSLT) indiquée et retourne la transformation résultante dans l'objet fourni.
Exemple [voir]
<html>
  <head>
    <%
      Dim Objet_Document, fichier
      Dim affichage

      Set Objet_Document = Server.CreateObject("MSXML2.DOMDocument")

      Objet_Document.async = false
      fichier = Server.MapPath("logitheque.xml")
      Objet_Document.load fichier

      affichage = Visualise_Noeud(Objet_Document)

      Function Visualise_Noeud(Objet_Noeud)
        Const NODE_ENTITY_REFERENCE = 5
        Dim resultat, i, nombre, nb_noeuds, Objet_Node, parent
        resultat = ""

        If Objet_Noeud.nodeType = NODE_ENTITY_REFERENCE Then
          Set parent = Objet_Noeud.parentNode
          resultat = resultat & "<b style='color: blue; font-weight: bold'>" _
                   & Objet_Noeud.nodeName _
                   & "</b>(" & Objet_Noeud.nodeTypeString & ") : <br>[ <b>" _
                   & parent.nodeName & "</b> = " & parent.text & " ]<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)
        Next

        Visualise_Noeud = resultat
      End Function
    %>
  </head>
  <body>
    <div><%= affichage %></div>
  </body>
</html>

2.2.18 / L'objet IXMLDOMImplementation

L'objet IXMLDOMImplementation fournit des méthodes qui sont indépendantes de n'importe quelles instances particulières du Modèle d'Objet du Document (DOM).

L'objet d'implémentation est créé à partir de la méthode implementation de l'objet DOMDocument.

Set Objet_Implementation = Objet_Document.implementation
Les Méthodes
Méthode
Description
True | False = Objet_Implementation.hasFeature(Caractéristique, Version)
retourne True si la version spécifiée de l'application supporte la caractéristique spécifiée.
Exemple [voir]
<%
  Dim Objet_Document
  Dim Objet_Implementation

  Set Objet_Document = Server.CreateObject("MSXML2.DOMDocument")
  Objet_Document.async = False
  Objet_Document.Load "logitheque.xml"

  Set Objet_Implementation = Objet_Document.implementation

  Response.Write "<u>L'implémentation DOM version 1.0 est :</u> <b>" _
                         & Objet_Implementation.hasFeature("DOM", "1.0") & "</b>"
%>

2.2.19 / L'objet IXMLDOMNotation

L'objet IXMLDOMNotation contient une notation déclarée dans la Définition de Type de Document (DTD) ou dans le schéma.

Déclaration XSchema
<xs:notation name="nom_notation"
           public="ID_Public" system="URI" />
L'appel XSchema de la notation
<xs:element name="nom_element">
  <xs:complexType>
    <xs:simpleContent>
      <xs:extension base="xs:hexBinary">
        <xs:attribute name="nom_attribut">
          <xs:simpleType>
            <xs:restriction base="xs:NOTATION">
              <xs:enumeration value="nom_notation"/>
              ...
              <xs:enumeration value="nom_notationN"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:attribute>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
</xs:element>
Utilisation dans le document XML
<nom_element nom_attribut="nom_notation">...</nom_element>
Déclaration DTD
<!NOTATION nom_notation SYSTEM "ID_Externe">
<!NOTATION nom_notation PUBLIC "ID_Public" "URI">
L'appel DTD de la notation
<!ENTITY nom_entité SYSTEM "URI" NDATA nom_notation>

<nom_element nom_attribut="&nom_entité;"/>

Les notations identifient par un nom le format d'entités non-analysées, le format des éléments qui porte un attribut de notation ou l'application à laquelle une instruction de traitement est adressée.

Un objet IXMLDOMNotation peut être créé au moyen de la méthode createNode appliquée à l'objet DOMDocument avec le type de noeud fixé à 12.

Set Objet_Notation = _
         Objet_Document.createNode(12, nom, URI_espace_noms)

La liste des notations dans une déclaration de type de document ou d'un schéma peut être extraite à partir de la propriété notations appliquée à l'objet IXMLDocumentType.

Set Objet_NamedNodeMap = Objet_DocumentType.notations

Set Objet_NamedNodeMap = Objet_Schema.notations
Set Objet_Notation = Objet_NamedNodeMap.item(index)

L'objet IXMLDOMEntity contenant une référence à une notation, peut livrer le nom de cette dernière par l'intermédiaire de la propriété notationName.

Chaîne = Objet_Entity.notationName

Un objet IXMLDOMNotation se distingue par un type de noeud spécifique, en l'occurrence par la valeur numérique 7 ou la chaîne de caractères notation en utilisant respectivement les propriétés nodeType et nodeTypeString.

Valeur_numérique = Objet_Notation.nodeType
Chaîne = Objet_Notation.nodeTypeString

Deux propriétés spécifiques à l'objet IXMLDOMNotation permettent de retourner l'identificateur public (publicID) ou système (systemID) de la notation.

Chaîne = Objet_Notation.systemID

Chaîne = Objet_Notation.publicID
Les Propriétés
Propriété
Description
Set Objet_NamedNodeMap = Objet_Notation.attributes
contient la liste des attributs pour ce noeud en lecture seule.
Chaîne = Objet_Notation.baseName
retourne le nom de base pour le nom qualifié avec l'espace de noms en lecture seule.
Set Objet_NodeList = Objet_Notation.childNodes
contient une liste de noeuds contenant les enfants en lecture seule.
Valeur = Objet_Notation.dataType
indique le type de données pour ce noeud en lecture et écriture.
Set Objet_Node = Objet_Notation.definition
retourne la définition d'un noeud dans le DTD ou le schéma en lecture seule.
Set Objet_Node = Objet_Notation.firstChild
contient le premier enfant de ce noeud en lecture seule.
Set Objet_Node = Objet_Notation.lastChild
contient le dernier noeud enfant en lecture seule.
Chaîne = Objet_Notation.namespaceURI
retourne l'URI (Uniform Resource Identifier) pour l'espace de noms en lecture seule.
Set Objet_Node = Objet_Notation.nextSibling
contient le frère suivant de ce noeud dans la liste d'enfants des parents en lecture seule.
Chaîne = Objet_Notation.nodeName
contient le nom qualifié de la référence d'entité, en lecture seule.
Valeur = Objet_Notation.nodeType
spécifie le type de noeud XML DOM qui détermine des valeurs valides et si le noeud peut avoir des noeuds enfants en lecture seule.
Objet_Valeur = Objet_Notation.nodeTypedValue
contient la valeur de ce noeud exprimée dans son type de donnée défini en lecture et écriture.
Chaîne = Objet_Notation.nodeTypeString
retourne le type de noeud dans une forme de chaîne de caractères en lecture seule.
Valeur = Objet_Notation.nodeValue
contient le texte associé avec le noeud en lecture et écriture.
Set Objet_Document = Objet_Notation.ownerDocument
retourne la racine du document qui contient ce noeud en lecture seule.
Set Objet_Node = Objet_Notation.parentNode
contient le noeud parent en lecture seule.
True | False = Objet_Notation.parsed
contient la valeur True si le noeud et tous ses descendants ont été analysées et instanciées, ou False si n'importe quels noeuds restent à être analysées en lecture seule.
Valeur = Objet_Notation.prefix
retourne le préfixe d'espace de noms en lecture seule.
Set Objet_Node = Objet_Notation.previousSibling
contient le frère gauche de ce noeud en lecture seule.
Chaîne = Objet_Notation.publicId
contient l'identificateur public associé avec l'entité, en lecture seule.
True | False = Objet_Notation.specified
indique si le noeud est explicitement spécifié ou dérivé d'une valeur par défaut dans le DTD ou le schéma en lecture seule.
True | False = Objet_Notation.systemId
contient l'identificateur du système pour la notation, en lecture seule.
Chaîne = Objet_Notation.text
contient le contenu textuel du noeud et de sa sous-arborescence en lecture et écriture.
Valeur = Objet_Notation.xml
contient la représentation XML du noeud et de tous ses descendants en lecture seule.
Les Méthodes
Méthode
Description
Set Objet_Node = Objet_Notation.appendChild(Nouvel_Enfant)
ajoute un nouvel enfant comme le dernier enfant de ce noeud.
Set Objet_Node = Objet_Notation.cloneNode(Bool_Profondeur)
crée un nouveau noeud qui est un double exact de ce noeud.
True | False = Objet_Notation.hasChildNodes()
retourne True si le noeud a des enfants.
Set Objet_Node = Objet_Notation.insertBefore(Nouvel_Enfant, Référence)
insère un noeud enfant à la gauche du noeud spécifié ou à la fin de la liste.
Set Objet_Node = Objet_Notation.removeChild(Noeud_Enfant)
enlève le noeud enfant spécifié de la liste d'enfant et le retourne.
Set Objet_Node = Objet_Notation.replaceChild(Nouvel_Enfant, Ancien_Enfant)
remplace l'ancien noeud enfant spécifié par le nouveau noeud enfant fourni dans le jeu d'enfants de ce noeud.
Set Objet_NodeList = Objet_Notation.selectNodes(Expression_Pattern)
applique l'opération de mise en correspondance de modèles indiquée au contexte de ce noeud et retourne la liste de noeuds correspondants.
Set Objet_Node = Objet_Notation.selectSingleNode(Chaîne_Requête)
applique l'opération de mise en correspondance de modèles indiquée au contexte de ce noeud et retourne la liste de premier noeud correspondant.
Chaîne = Objet_Notation.transformNode(Objet_StyleSheet)
traite ce noeud et ses enfants utilisant la feuille de style de tranformation (XSLT) indiquée et retourne la transformation résultante.
Objet_Notation.transformNodeToObject(Feuille_Style, Objet)
traite ce noeud et ses enfants utilisant la feuille de style de tranformation (XSLT) indiquée et retourne la transformation résultante dans l'objet fourni.
Exemple [voir]
<html>
  <head>
    <%
      Dim Objet_Document, fichier
      Dim affichage

      Set Objet_Document = Server.CreateObject("MSXML2.DOMDocument.4.0")

      Objet_Document.async = false
      fichier = Server.MapPath("fichier.xml")
      Objet_Document.load fichier

      affichage = Visualise_Noeud(Objet_Document, 0)

      Function Visualise_Noeud(Objet_Noeud, nb_espaces)
        Const NODE_NOTATION = 12
        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 = NODE_NOTATION Then
          resultat = resultat & "<b style='color:red'>[ SystemID = '" _
                       & Objet_Noeud.systemID & "' - PublicID = '" _
                       & Objet_Noeud.publicID & "' ]</b><br>"
        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
  %>
  </head>
  <body>
    <div><%= affichage %></div>
  </body>
</html>
Fichier : fichier.dtd
<?xml version="1.0" encoding="iso-8859-1"?>
<!ELEMENT vacance (document+)>
<!ELEMENT document EMPTY>
<!ATTLIST document source ENTITY #REQUIRED>
<!NOTATION avi SYSTEM "video/avi">
<!NOTATION mpeg SYSTEM "video/mpeg">
<!NOTATION mov SYSTEM "video/quicktime">
<!NOTATION jpeg SYSTEM "image/jpeg">
<!NOTATION gif SYSTEM "image/gif">
<!ENTITY vacanceavi SYSTEM "video.avi" NDATA avi>
<!ENTITY vacancempg SYSTEM "video.mpg" NDATA mpeg>
<!ENTITY vacancegif SYSTEM "photo.gif" NDATA gif>
<!ENTITY vacancejpeg SYSTEM "image.jpg" NDATA jpeg>
<!ENTITY vacancemov SYSTEM "video.mov" NDATA mov>
Fichier : fichier.xml
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE videotheque SYSTEM "fichier.dtd">
<vacance>
  <document source="&vacanceavi;"/>
  <document source="&vacancegif;"/>
  <document source="&vacancejpeg;"/>
  <document source="&vacancemov;"/>
  <document source="&vacancempg;"/>
</vacance>

2.2.20 / L'objet IXMLDOMProcessingInstruction

L'objet IXMLDOMProcessingInstruction représente une instruction de traitement dans laquelle une information spécifique pour le processeur XML est conservée dans le texte du document.

Un objet IXMLDOMProcessingInstruction est créé à partir de la méthode createProcessingInstruction de l'objet DOMDocument.

Set Objet_ProcessingInstruction = _
      Objet_Document.createProcessingInstruction(Nom, Contenu)

Le nom est une chaîne de caractères XML valide qui sera séparée du contenu par un espace blanc dans le noeud résultant.

<?Nom Contenu?>

Le contenu d'un tel noeud est constitué d'une expression textuelle représentant par exemple, un attribut et sa valeur associée ou une classe Java.

<?xml-stylesheet type="text/xsl" href="../style.xsl"?>

Une instruction de traitement est donc formée par un balisage particulier dans le document XML, soit une séquence de caractères <? pour indiquer sont commencement et une autre ?> pour la fin.

Une instruction de traitement est représentée par un type de noeud précis, en l'occurrence par la constante NODE_PROCESSING_INSTRUCTION possédant la valeur numérique 7 ou textuelle processinginstruction. Ainsi, ce noeud pourra être repéré dans une arborescence XML par la méthode nodeType ou nodeTypeString appliquée à l'objet nodal courant.

If Objet_Node.nodeType = 7 Then
  ...
End If

If Objet_Node.nodeTypeString = "processinginstruction" Then
  ...
End If
Les Propriétés
Propriété
Description
Set Objet_NamedNodeMap = Objet_ProcInst.attributes
contient la liste des attributs pour ce noeud en lecture seule.
Chaîne = Objet_ProcInst.baseName
retourne le nom de base pour le nom qualifié avec l'espace de noms en lecture seule.
Set Objet_NodeList = Objet_ProcInst.childNodes
contient une liste de noeuds contenant les enfants en lecture seule.
Valeur = Objet_ProcInst.dataType
indique le type de données pour ce noeud en lecture et écriture.
Set Objet_Node = Objet_ProcInst.definition
retourne la définition d'un noeud dans le DTD ou le schéma en lecture seule.
Set Objet_Node = Objet_ProcInst.firstChild
contient le premier enfant de ce noeud en lecture seule.
Set Objet_Node = Objet_ProcInst.lastChild
contient le dernier noeud enfant en lecture seule.
Chaîne = Objet_ProcInst.namespaceURI
retourne l'URI (Uniform Resource Identifier) pour l'espace de noms en lecture seule.
Set Objet_Node = Objet_ProcInst.nextSibling
contient le frère suivant de ce noeud dans la liste d'enfants des parents en lecture seule.
Chaîne = Objet_ProcInst.nodeName
contient le nom qualifié de l'élément, l'attribut, la référence d'entité ou une chaîne de caractères fixée pour d'autres types de noeud en lecture seule.
Chaîne = Objet_ProcInst.nodeType
spécifie le type de noeud XML DOM qui détermine des valeurs valides et si le noeud peut avoir des noeuds enfants en lecture seule.
Set Objet_Valeur = Objet_ProcInst.nodeTypedValue
contient la valeur de ce noeud exprimée dans son type de donnée défini en lecture et écriture.
Chaîne = Objet_ProcInst.nodeTypeString
retourne le type de noeud dans une forme de chaîne de caractères en lecture seule.
Set Objet_Valeur = Objet_ProcInst.nodeValue
contient le texte associé avec le noeud en lecture et écriture.
Set Objet_Document = Objet_ProcInst.ownerDocument
retourne la racine du document qui contient ce noeud en lecture seule.
Set Objet_Node = Objet_ProcInst.parentNode
contient le noeud parent en lecture seule.
True | False = Objet_ProcInst.parsed
contient la valeur True si le noeud et tous ses descendants ont été analysées et instanciées, ou False si n'importe quels noeuds restent à être analysées en lecture seule.
Valeur = Objet_ProcInst.prefix
retourne le préfixe d'espace de noms en lecture seule.
Set Objet_Node = Objet_ProcInst.previousSibling
contient le frère gauche de ce noeud en lecture seule.
True | False = Objet_ProcInst.specified
indique si le noeud est explicitement spécifié ou dérivé d'une valeur par défaut dans le DTD ou le schéma en lecture seule.
Chaîne = Objet_ProcInst.target
indique la cible, soit l'application à laquelle cette instruction detraitement est dirigé, en lecture seule.
Chaîne = Objet_ProcInst.text
contient le contenu textuel du noeud et de sa sous-arborescence en lecture et écriture.
Valeur = Objet_ProcInst.xml
contient la représentation XML du noeud et de tous ses descendants en lecture seule.
Les Méthodes
Méthode
Description
Objet_ProcInst.appendChild(Nouvel_Enfant)
ajoute un nouvel enfant comme le dernier enfant de ce noeud.
Set Objet_Node = Objet_ProcInst.cloneNode(Bool_Profondeur)
crée un nouveau noeud qui est un double exact de ce noeud.
True | False = Objet_ProcInst.hasChildNodes()
retourne True si le noeud a des enfants.
Set Objet_Node = Objet_ProcInst.insertBefore(Nouvel_Enfant, Référence)
insère un noeud enfant à la gauche du noeud spécifié ou à la fin de la liste.
Set Objet_Node = Objet_ProcInst.removeChild(Noeud_Enfant)
enlève le noeud enfant spécifié de la liste d'enfant et le retourne.
Set Objet_Node = Objet_ProcInst.replaceChild(Nouvel_Enfant, Ancien_Enfant)
remplace l'ancien noeud enfant spécifié par le nouveau noeud enfant fourni dans le jeu d'enfants de ce noeud.
Set Objet_NodeList = Objet_ProcInst.selectNodes(Expression_Pattern)
applique l'opération de mise en correspondance de modèles indiquée au contexte de ce noeud et retourne la liste de noeuds correspondants.
Set Objet_Node = Objet_ProcInst.selectSingleNode(Chaîne_Requête)
applique l'opération de mise en correspondance de modèles indiquée au contexte de ce noeud et retourne la liste de premier noeud correspondant.
Chaîne = Objet_ProcInst.transformNode(Objet_StyleSheet)
traite ce noeud et ses enfants utilisant la feuille de style de tranformation (XSLT) indiquée et retourne la transformation résultante.
Objet_ProcInst.transformNodeToObject(Feuille_Style, Objet)
traite ce noeud et ses enfants utilisant la feuille de style de tranformation (XSLT) indiquée et retourne la transformation résultante dans l'objet fourni.
Exemple [voir]
<%
  Dim Objet_Document, racine, noeud
  Dim Objet_ProcessingInstruction

  Set Objet_Document = Server.CreateObject("MSXML2.DOMDocument")
  Objet_Document.load(Server.MapPath("fichier.xml"))
  Set racine = Objet_Document.documentElement

  For Each noeud In Objet_Document.childNodes
    If noeud.nodeType = 7 AND noeud.nodeName = "xml" Then
      Response.Write "<h3>Une instruction de traitement a été trouvée " _
                    & (<i>" & noeud.nodeTypeString & "</i>) "</h3>"
      Response.Write "<?" & noeud.nodeName & " " & noeud.text & "?>"

      Exit For
    Else
      Response.Write "<h3>Aucune instruction de traitement n'a été trouvée.</h3>"

      Set Objet_ProcessingInstruction = _
              Objet_Document.createProcessingInstruction("xml", _
                              "version=""1.0"" encoding=""iso-8859-1""")

      Objet_Document.insertBefore Objet_ProcessingInstruction, racine

      Response.Write "<b><u>L'instruction de traitement suivante " _ 
                           & "a été ajoutée :</u></b><br>" _
                           & "<?" & Objet_ProcessingInstruction.nodeName & " " _
                           & Objet_ProcessingInstruction.text & "?>"
    End If
  Next

  Objet_Document.Save(Server.MapPath("fichier.xml"))

  Set Objet_Document = Nothing
%>

2.2.21 / L'objet XMLSchemaCacheet IXMLDOMSchemaCollection

L'objet XMLSchemaCache et la collection IXMLDOMSchemaCollection est utilisé par les schémas et les propriétés d'espace de noms sur l'objet IXMLDOMDocument2.

Set Objet_SchemaCache = _
               Server.CreateObject("Msxml2.XMLSchemaCache")

L'objet XMLSchemaCache devient une collection lorsqu'un ou plusieurs objets du même type sont ajoutés par l'intermédiaire de la méthode addCollection.

Set Objet_SchemaCache =_
               Server.CreateObject("Msxml2.XMLSchemaCache")
Set Objet_SchemaCollection = _
               Server.CreateObject("Msxml2.XMLSchemaCache")
Objet_SchemaCache.add('Espace_Nom','Objet_Schéma')
Objet_SchemaCollection.addCollection(Objet_SchemaCache)

L'objet XMLSchemaCache est une unité d'exécution libre (free-threaded) et peut être utilisé dans de multiples documents simultanément.

Un seul document de schéma peut appartenir à de multiples collections de schéma et resteront en lecture seule jusqu'à ce qu'il soit enlevé de toutes les collections. Les documents de schéma appartenant à une collection doivent être en unité d'exécution libre.

Les Propriétés
Propriété
Description
Valeur = Objet_SchemaCollection.length
retourne le nombre d'espaces de noms en cours dans la collection.
Les Méthodes
Méthode
Description
Objet_SchemaCollection.add(Espace_Nom, Objet_Schema)
ajoute un nouvel item à la collection de schémas.
Objet_SchemaCollection.addCollection(Objet_SchemaCollection)
ajoute tous les schémas provenant d'une autre collection à l'intérieur de la collection courante.
Set Objet_Node = Objet_SchemaCollection.get(URI_Espace_Nom)
retourne en lecture seule le noeud DOM (Document Object Model) contenant l'élément <Schema> à l'URI spécifié.
URI_Espace_Nom = Objet_SchemaCollection.namespaceURI(index)
retourne l'URI d'espace de noms appartenant à l'index spécifié.
Objet_SchemaCollection.remove(URI_Espace_Nom)
enléve les espaces de noms spécifiés d'une collection.
Exemple [voir]
</html>
  <body>
    <script language="Javascript" type="text/javascript">
      var Objet_Document = 
                    new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
      var Objet_Style = 
                    new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
      var Objet_SchemaCache = 
                    new ActiveXObject("Msxml2.XMLSchemaCache");
      Objet_SchemaCache.add("x-schema:livre.xdr", "c:\\exemple\\livre.xdr");
      Objet_Document.schemas = Objet_SchemaCache;
      Objet_Document.async = false;
      Objet_Style.async = false;
      Objet_Document.load("c:\\exemple\\livre.xml");
      Objet_Style.load("c:\\exemple\\livre.xsl");
      document.write(Objet_Document.transformNode(Objet_Style));
    </script>
  </body>
</html>
Fichier : livre.xml
<?xml version='1.0'?>
<logitheque 
            xmlns="x-schema:logitheque.xdr"
            xmlns:dt="urn:schemas-microsoft-com:datatypes">
  <logiciel>
    <nom>ASP, ADO, and XML Complete</nom>
    <editeur>Sybex</editeur>
    <commentaire>Develop dynamic Web applications
      with ASP, ADO and XML.</commentaire>
  </logiciel>
  <logiciel>
    <nom>XSLT Programmer's reference</nom>
    <editeur>Wrox Press</editeur>
    <commentaire>This book is for programmers who want to learn how 
      to use XSLT language to develop web applications.</commentaire>
  </logiciel>
</logitheque>
Fichier : livre.xdr
<?xml version="1.0" encoding="ISO-8859-1"?>
<Schema name="schema-livre"
                xmlns="urn:schemas-microsoft-com:xml-data"
                xmlns:dt="urn:schemas-microsoft-com:datatypes">
  <ElementType name="commentaire" model="closed"
                         content="textOnly" dt:type="string"/>
  <ElementType name="editeur" model="closed"
                         content="textOnly" dt:type="string"/>
  <ElementType name="logiciel" model="closed"
                         content="eltOnly" order="seq">
    <element type="nom" minOccurs="1" maxOccurs="1"/>
    <element type="editeur" minOccurs="1" maxOccurs="1"/>
    <element type="commentaire" minOccurs="1" maxOccurs="1"/>
  </ElementType>
  <ElementType name="logitheque" model="closed"
                         content="eltOnly" order="seq">
    <attributeType name="xmlns" dt:type="string"/>
    <attribute type="xmlns"/>
    <element type="logiciel" minOccurs="1" maxOccurs="*"/>
  </ElementType>
  <ElementType name="nom" model="closed"
                         content="textOnly" dt:type="string"/>
</Schema>
Fichier : livre.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" 
                    xmlns:liv="x-schema:livre.xdr"
                    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                    xmlns:dt="urn:schemas-microsoft-com:datatypes">
  <xsl:template match="/">
    <html>
      <head/>
      <body>
        <table border="1">
        <xsl:apply-templates/>
        </table>
      </body>
    </html>
  </xsl:template>
  <xsl:template match="liv:logiciel">
    <tr>
      <td>
        <xsl:for-each select="liv:nom">
        <b>
          <xsl:apply-templates/>
        </b>
        </xsl:for-each>
      </td>
      <td>
        <xsl:for-each select="liv:editeur">
        <xsl:apply-templates/>
        </xsl:for-each>
      </td>
    </tr>
    <tr>
      <td colspan="2">
        <xsl:for-each select="liv:commentaire">
        <xsl:apply-templates/>
        </xsl:for-each>
      </td>
    </tr>
  </xsl:template>
</xsl:stylesheet>

2.2.22 / Les objets ServerXMLHTTP et IServerXMLHTTPRequest

les objets ServerXMLHTTP et IServerXMLHTTPRequest fournissent des méthodes et des propriétés qui permet d'établir une connexion HTTP entre les fichiers ou les objets dur différents serveurs Web.

Set Objet_ServerXMLHTTP = _
                    Server.CreateObject("MSXML2.ServerXMLHTTP")
Set Objet_ServerXMLHTTP = _
                    Server.CreateObject("afba6b42-5692-48ea-8141-dc517dcf0ef1")

L'objet ServerXMLHTTP offre des fonctionnalités similaires à celles de l'objet XMLHTTP. Toutefois, l'objet ServerXMLHTTP ne compte pas sur le contrôle WinInet pour l'accès HTTP vers des documents XML distants.

L'objet ServerXMLHTTP utilise une nouvelle zone client HTTP. Conçu pour les applications serveurs, ce sous-ensemble de sécurité du serveur de WinInet procure une meilleure fiabilité et sécurité de la zone client HTTP.

L'objet ServerXMLHTTP est la plupart du temps utilisé pour :

Il est possible d'utiliser l'objet ServerXMLHTTP, soit indirectement en employant la méthode setProperty de l'objet DOMDocument, soit directement en employant l'objet ServerXMLHTTP lui-même.

L'utilisation indirecte de l'objet ServerXMLHTTP s'effectue par l'intermédiaire de la propriété setProperty de l'objet DOMDocument de la façon suivante :

Dim Objet_Document
Set Objet_Document = _
                           Server.CreateObject("MSXML2.DOMDocument")
Objet_Document.async = false
Objet_Document.setProperty("ServerHTTPRequest", true)
Objet_Document.load("http://nom-serveur/reponse.asp")

Il est nécessaire d'utiliser la méthode setProperty de l'objet DOMDocument pour fixer l'indicateur de la propriété ServerHTTPRequest, lequel indique que l'analyseur doit utiliser la sécurité du serveur de l'objet ServerXMLHTTP, à la place de l'objet de DOMDocument, pour charger simultanément un document XML depuis un serveur.

Comme avec tous les indicateurs de propriété, la propriété ServerHTTPRequest doit être fixée avant l'appel de la méthode load de l'objet DOMDocument, sinon l'analyseur ignorera l'indicateur de propriété.

La valeur de l'indicateur égale à True signifie la création d'un objet ServerXMLHTTP d'arrière-plan, distinct de l'objet DOMDocument.

L'utilisation directe de l'objet de ServerXMLHTTP permet un contrôle procédural beaucoup plus important qu'avec la méthode setProperty précitée.

Plutôt que de récupérer seulement les réponses XML à partir d'un serveur distant, l'objet ServerXMLHTTP permet aux développeurs d'utiliser les méthodes de transmissions GET et POST, aussi bien que la capacité de manipuler des connexions de sécurité de base.

Dim Objet_ServerXMLHTTP
Set Objet_ServerXMLHTTP = _
                 Server.CreateObject ("MSXML2.ServerXMLHTTP")
Objet_ServerXMLHTTP.open("GET", _
                                       "http://nom-serveur/reponse.asp, false)

L'interface IServerXMLHTTPRequest hérite de l'IXMLHTTPRequest et l'étend avec quatre nouvelles méthodes getOption, setOption, waitForResponse et setTimeouts.

Les Propriétés
Propriété
Description
Objet_ServerXMLHTTPRequest.onreadystatechange = GestionnaireEvénement
indique le getionnaire d'événements pour être appelé lorsque la propriété readyState change, en lecture et écriture.
Etat = Objet_ServerXMLHTTPRequest.readyState
représente l'état de la requête, en lecture seule.
Chaîne = Objet_ServerXMLHTTPRequest.responseBody
représente le corps de l'entité de réponse commun tableau d'octets non-signés, en lecture seule.
Stream = Objet_ServerXMLHTTPRequest.responseStream
représente le corps de l'entité de réponse comme un flux de données textuelles, en lecture seule.
Texte = Objet_ServerXMLHTTPRequest.responseText
représente le corps de l'entité de réponse comme une chaîne de caractères, en lecture seule.
Set Objet_XML = Objet_ServerXMLHTTPRequest.responseXML
représente le corps de l'entité de réponse comme analysé par l'analyseur de Microsoft MSXML, en lecture seule.
Valeur = Objet_ServerXMLHTTPRequest.status
représente le code du statut HTTP retourné par une requête, en lecture seule.
Chaîne = Objet_ServerXMLHTTPRequest.statusText
représente le statut de la ligne de réponse HTTP, en lecture seule.
Les Méthodes
Méthode
Description
Objet_ServerXMLHTTP.abort()
annule la requête HTTP courante.
Chaîne = Objet_HttpRequest.getAllResponseHeaders()
récupère les valeurs de tous les entêtes HTTP.
Valeur = Objet_ServerXMLHTTPRequest.getOption(option)
retourne la valeur de l'une des options suivantes :
  • SXH_OPTION_URL_CODEPAGE
  • SXH_OPTION_ESCAPE_PERCENT_IN_URL
  • SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS
  • SXH_OPTION_SELECT_CLIENT_SSL_CERT
Chaîne = Objet_HttpRequest.getResponseHeader(Nom_Entête)
récupère la valeur d'un entête HTTP à partir du corps de la réponse.
Objet_ServerXMLHTTP.open(GET | POST | PUT | PROPFIND, URL_Requête
[, Bool_Async, Nom_Utilisateur, Mot_Passe])
initialise une requête Msxml2.XMLHTTP, et spécifie la méthode, l'adresse URL et les informations d'authentification pour la requête.
Objet_ServerXMLHTTP.send([Nom_Corps])
envoie une requête HTTP vers le serveur et reçois une réponse.
Objet_ServerXMLHTTPRequest.setOption(option) = Valeur
fixe une des options suivantes :
  • SXH_OPTION_URL_CODEPAGE
  • SXH_OPTION_ESCAPE_PERCENT_IN_URL
  • SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS
  • SXH_OPTION_SELECT_CLIENT_SSL_CERT
Objet_ServerXMLHTTPRequest.setTimeouts(Pause_Résolution,
Pause_Connection, Pause_Envoi, Pause_Réception)
indique les paramètrages de pause pour la résolution du nom de domaine, en établissant la connexoion vers le serveur, l'envoi des données et la réception de la réponse. La valeur 1000 représente une seconde.
Objet_HttpRequest.setRequestHeader(Nom_Entête)
spécifie le nom d'un entête HTTP.
Objet_ServerXMLHTTPRequest.waitForResponse(Temps_Secondes)
autorise les requêtes serveurs à suspendre l'exécution tant que l'attente pour une opération d'envoi asychrone soit complète.
Exemple [voir]
Fichier sur le serveur hôte
<html>
  <head>
    <title>La poésie</title>
  </head>
  <body>
    <h2>Les poèmes</h2>
    <a href="http://serveur-hote/serverxmlhttp.asp">
      La locution des pierrots
    </a>
    ...
  </body>
</html>
Fichier : serverxmlhttp.asp
<html>
  <head>
    <%
      Dim Objet_ServerXMLHTTP
      Dim auteur, titre, poeme
      Set Objet_ServerXMLHTTP = _
                               Server.CreateObject("MSXML2.ServerXMLHTTP")
      Objet_ServerXMLHTTP.open _
                              "GET", "http://serveur-distant/reponse.asp", false
      Objet_ServerXMLHTTP.send
      Set titre = _
        Objet_ServerXMLHTTP.responseXML.selectSingleNode "/poesie/titre"
      Set auteur = _
        Objet_ServerXMLHTTP.responseXML.selectSingleNode "/poesie/auteur"
      Set poeme = _
        Objet_ServerXMLHTTP.responseXML.selectSingleNode "/poesie/texte"
    %>
  </head>
  <body>
    <h2>
      <% Response.Write titre.text %>
    </h2>
    <i>(Un poème de <% Response.Write auteur.text %>)</i>
    <p>
      <% Response.Write poeme.text %>
    </p>
  </body>
</html>
Fichier : reponse.asp
<%
  Dim obj_dom
  Set obj_dom = Server.CreateObject("MSXML2.DOMDocument")
  obj_dom.async = false
  obj_dom.load Server.MapPath("source.xml")
  Response.ContentType = "text/xml"
  obj_dom.save Response
%>
Fichier : source.xml
<?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
<!DOCTYPE poesie [
  <!ELEMENT poesie (titre, texte, auteur)>
  <!ELEMENT titre (#PCDATA)>
  <!ELEMENT texte (#PCDATA)>
  <!ELEMENT auteur (#PCDATA)>
]>
<poesie>
  <titre>Locution des pierrots</titre>
  <texte> 
    Je ne suis qu'un viveur lunaire
    Qui fait des ronds dans le bassin
    Et cela, sans autre dessein
    Que de devenir légendaire.

    Retroussant d'un air de défin
    Mes manches de Mandarin pâle,
    J'arrondis ma bouche et - j'exhale
    Des conseils doux de Crucifix

    Ah! oui, devenir légendaire,
    Au seuil des siècles charlatans !
    Mais où sont les Lunes d'antan ?
    Et que Dieu n'est-il à refaire ?
  </texte>
  <auteur>Jules Laforgue</auteur>
</poesie>

2.2.23 / L'objet IXMLDOMSelection

L'objet IXMLDOMSelection représente la liste de noeuds qui correspond à un modèle XSL ou à une expression XPath.

Set Objet_Selection = _
                Objet_Document2.selectNodes(Expression)

L'objet IXMLDOMSelection est créé par l'intermédiaire de la méthode selectNodes de l'objet IXMLDOMDocument2. Cet objet est une extension du DOM du W3C (Worldwide Web Consortium).

Les Propriétés
Propriété
Description
Set Objet_Node = Objet_Selection.context
indique un noeud à appliquer à une sélection.
Expression = Objet_Selection.expr
obtient ou fixe une expression XPath.
Valeur = Objet_Selection.length
indique le nombre d'items d'une collection.
Les Propriétés
Propriété
Description
Set Autre_Objet_Selection = Objet_Selection.clone
génére une copie exacte de l'objet XMLDOMSelection courant.
Chaîne = Objet_Selection.getProperty(Nom)
obtient une propriété par son nom.
Set Objet_Node = Objet_Selection.item(Index)
permet un accès aléatoire à des noeuds individuels à l'intérieur d'une collection.
Set Objet_Node = Objet_Selection.matches(Objet_Node)
vérifie si le noeud est contenu dans la collection.
Set Objet_Node = Objet_Selection.nextNode
retourne le noeud textuel dans une collection.
Set Objet_Node = Objet_Selection.peekNode
obtient le noeud textuel que la méthode nextNode retournerait sans avancer la position de ligne.
Objet_Selection.removeAll
enlève tous les noeuds du contexte courant qui correspondent à la requête.
Set Objet_Node = Objet_Selection.removeNext
enlève le noeud textuel qui est retourné par la méthode peekNode ou nextNode.
Objet_Selection.reset
réinitialise la position de la liste.
Exemple [voir]
<%
  Dim obj_dom, objet_selection, i
  Dim fichier, noeud, expression

  Set obj_dom = Server.CreateObject("Msxml2.DOMDocument")
  obj_dom.async = false
  fichier = Server.MapPath("logitheque.xml")
  obj_dom.load(fichier)

  obj_dom.setProperty "SelectionLanguage", "XPath"
  Set objet_selection = obj_dom.selectNodes("//categorie[6]/logiciel/nom")
  expression = objet_selection.expr

  Response.Write "<u>Contenu de la sélection récupérée par l'expression <i>" _
                 & objet_selection.getProperty("SelectionLanguage") _
                 & "</i> suivante :</u> <b>" & expression & "</b><hr>"

  For i = 0 To objet_selection.length - 1
    Set noeud = objet_selection.item(i)
    Response.Write i & "- <b>" & noeud.nodeName & "</b> : " & noeud.text & "<br>"
  Next
%>

2.2.24 / L'objet IXMLDOMText

L'objet IXMLDOMText représente le contenu textuel d'un élément ou d'un attribut.

Un objet DOM textuel est créé par l'intermédiaire de la méthode createTextNode appliquée à l'objet DOMDocument.

Set Objet_DOMText = obj_dom.createTextNode("nom_noeud")

L'attribution d'un objet IXMLDOMText à un noeud élément ou attribut, s'effectue au moyen de la méthode appendChild de l'objet IXMLDOMNode.

objet_DOMNode.appendChild objet_DOMText

Le langage XML se réfère à ce contenu textuel comme les données de caractère et le distingue du marquage, soit les balises qui modifient ces données de caractère.
S'il n'y a aucun marquage à l'intérieur d'un élément, le texte de l'élément est contenu dans l'objet IXMLDOMText unique qui est l'enfant de l'élément.
S'il y a du marquage à l'intérieur d'un élément, il est analysé syntaxiquement à l'intérieur des éléments enfants qui sont des frères de l'objet IXMLDOMText.
Le contenu des éléments de marquage apparaît aussi dans des noeuds de texte, qui sont les enfants de l'élément de marquage spécifique.

Lorsqu'un document est d'abord rendu disponible au Modèle d'Objet de Document XML (DOM), tout le texte est normalisé : il y a seulement un noeud textuel pour chaque bloc de texte.
Les utilisateurs peuvent créer des noeuds de texte adjacents qui représentent le contenu d'un élément donné sans n'importe quel marquage intervenant, mais doivent être conscients qu'il n'y a aucune façon de représenter les séparations entre ces noeuds, donc ils ne persisteront pas entre des sessions de DOM XML.

La méthode normalize sur l'objet IXMLDOMElement fusionne les noeuds textuels adjacents à l'intérieur d'un unique noeud.

objet_DOMElement.normalize

Il est possible de normaliser avant le démarrage de n'importe quels opérations dépendant d'une structure de document particulière pour assurer que des sessions suivantes fonctionneront sur la même structure.

Les Propriétés
Propriété
Description
Set Objet_NamedNodeMap = Objet_Text.attributes
contient la liste des attributs pour ce noeud en lecture seule.
Chaîne = Objet_Text.baseName
retourne le nom de base pour le nom qualifié avec l'espace de noms en lecture seule.
Set Objet_NodeList = Objet_Text.childNodes
contient une liste de noeuds contenant les enfants en lecture seule.
Chaîne = Objet_Text.data
contient les données du noeud CDATA, en lecture et écriture.
Valeur = Objet_Text.dataType
indique le type de données pour ce noeud en lecture et écriture.
Set Objet_Node = Objet_Text.definition
retourne la définition d'un noeud dans le DTD ou le schéma en lecture seule.
Set Objet_Node = Objet_Text.firstChild
contient le premier enfant de ce noeud en lecture seule.
Set Objet_Node = Objet_Text.lastChild
retourne le dernier noeud enfant en lecture seule.
Valeur = Objet_Text.length
spécifie la longueur, en caractères des données, en lecture seule.
Chaîne = Objet_Text.namespaceURI
retourne l'URI (Uniform Resource Identifier) pour l'espace de noms en lecture seule.
Set Objet_Node = Objet_Text.nextSibling
contient le frère suivant de ce noeud dans la liste d'enfants des parents en lecture seule.
Chaîne = Objet_Text.nodeName
contient le nom qualifié de l'élément, l'attribut, la référence d'entité ou une chaîne de caractères fixée pour d'autres types de noeud en lecture seule.
Valeur = Objet_Text.nodeType
spécifie le type de noeud XML DOM qui détermine des valeurs valides et si le noeud peut avoir des noeuds enfants en lecture seule.
Objet_Valeur = Objet_Text.nodeTypedValue
contient la valeur de ce noeud exprimée dans son type de donnée défini en lecture et écriture.
Chaîne = Objet_Text.nodeTypeString
retourne le type de noeud dans une forme de chaîne de caractères en lecture seule.
Valeur = Objet_Text.nodeValue
contient le texte associé avec le noeud en lecture et écriture.
Set Objet_Document = Objet_Text.ownerDocument
retourne la racine du document qui contient ce noeud en lecture seule.
Set Objet_Node = Objet_Text.parentNode
contient le noeud parent en lecture seule.
True | False = Objet_Text.parsed
contient la valeur True si le noeud et tous ses descendants ont été analysées et instanciées, ou False si n'importe quels noeuds restent à être analysées en lecture seule.
Valeur = Objet_Text.prefix
retourne le préfixe d'espace de noms en lecture seule.
Set Objet_Node = Objet_Text.previousSibling
contient le frère gauche de ce noeud en lecture seule.
True | False = Objet_Text.specified
indique si le noeud est explicitement spécifié ou dérivé d'une valeur par défaut dans le DTD ou le schéma en lecture seule.
Chaîne = Objet_Text.text
contient le contenu textuel du noeud et de sa sous-arborescence en lecture et écriture.
Valeur = Objet_Text.xml
contient la représentation XML du noeud et de tous ses descendants en lecture seule.
Les Méthodes
Méthode
Description
Set Objet_Node = Objet_Text.appendChild(Nouvel_Enfant)
ajoute un nouvel enfant comme le dernier enfant de ce noeud.
Objet_Text.appendData(Chaîne)
ajoute la chaîne de caractères spécifiée aux données textuelles existantes.
Set Objet_Node = Objet_Text.cloneNode(Bool_Profondeur)
crée un nouveau noeud qui est un double exact de ce noeud.
Objet_Text.deleteData(Position, Nb_Caractères)
supprime la sous-chaîne de caractères à l'intérieur de données textuelles.
True | False = Objet_Text.hasChildNodes()
retourne True si le noeud a des enfants.
Set Objet_Node = Objet_Text.insertBefore(Nouvel_Enfant, Référence)
insère un noeud enfant à la gauche du noeud spécifié ou à la fin de la liste.
Objet_Text.insertData(Position)
insère la chaîne spécifiée à la position indiquée.
Set Objet_Node = Objet_Text.removeChild(Noeud_Enfant)
enlève le noeud enfant spécifié de la liste d'enfant et le retourne.
Set Objet_Node = Objet_Text.replaceChild(Nouvel_Enfant, Ancien_Enfant)
remplace l'ancien noeud enfant spécifié par le nouveau noeud enfant fourni dans le jeu d'enfants de ce noeud.
Objet_Text.replaceData(Position, Nb_Caractères, Données)
remplace le nombre de caractères spécifiés par la chaîne de caractères fournie.
Set Objet_NodeList = Objet_Text.selectNodes(Expression_Pattern)
applique l'opération de mise en correspondance de modèles indiquée au contexte de ce noeud et retourne la liste de noeuds correspondants.
Set Objet_Node = Objet_Text.selectSingleNode(Chaîne_Requête)
applique l'opération de mise en correspondance de modèles indiquée au contexte de ce noeud et retourne la liste de premier noeud correspondant.
True | False = Objet_Text.specified
indique si le noeud est explicitement spécifié ou dérivé d'une valeur par défaut dans le DTD ou le schéma en lecture seule.
Set Objet_Text = Objet_Text.splitText(Position)
découpe le texte du noeud à l'intérieur de deux noeuds textuels à la position spécifiée et insère le nouveau texte dans l'arborexcence comme un frère qui suit immédiatement le noeud.
Chaîne = Objet_Text.substringData(Position, Nb_Caractères)
récupère une sous-chaîne de caractères d'une chaîne complète à l'intervalle spécifié.
Chaîne = Objet_Text.transformNode(Objet_StyleSheet)
traite ce noeud et ses enfants utilisant la feuille de style de tranformation (XSLT) indiquée et retourne la transformation résultante.
Objet_Text.transformNodeToObject(Feuille_Style, Objet)
traite ce noeud et ses enfants utilisant la feuille de style de tranformation (XSLT) indiquée et retourne la transformation résultante dans l'objet fourni.
Exemple [voir]
<%
  Const OpenFileForReading = 1

  Dim obj_fso, obj_dom, obj_log, racine
  Dim obj_client, obj_document, obj_protocole, obj_code, obj_methode
  Dim document_txt, protocole_txt, code_txt, methode_txt
  Dim adresse_attr, adresse_txt, poids_attr, poids_txt
  Dim adresse_ip, methode, document, protocole, code, poids
  Dim tableau, elt_adresse, i
  i = 1

  Set obj_fso = Server.CreateObject("Scripting.FileSystemObject")
  fichier = Server.MapPath("fichier_log.txt")
  Set obj_log = obj_fso.OpenTextFile(fichier, OpenFileForReading)

  Set obj_dom = Server.CreateObject("MSXML2.DOMDocument")
  Set racine = obj_dom.createElement("statistique")
  obj_dom.appendChild racine

  Do While Not obj_log.AtEndOfStream
    ligne = obj_log.ReadLine
    tableau = Split(ligne, " ", -1, 1)
    elt_adresse = Split(tableau(3), ",", -1, 1)

    adresse_ip = tableau(0)
    methode = Right(elt_adresse(0), Len(elt_adresse(0)) - 1)
    document = elt_adresse(1)
    protocole = Left(elt_adresse(2), Len(elt_adresse(2)) - 1)
    code = tableau(4)
    poids = tableau(5)

    Set obj_client = obj_dom.createElement("client")
    Set adresse_attr = obj_dom.createAttribute("adresse_ip")
    Set adresse_txt = obj_dom.createTextNode(adresse_ip)
    obj_client.setAttributeNode(adresse_attr)

    Set obj_document = obj_dom.createElement("document")
    Set document_txt = obj_dom.createTextNode(document)
    Set poids_attr = obj_dom.createAttribute("poids")
    Set poids_txt = obj_dom.createTextNode(poids)
    obj_document.setAttributeNode(poids_attr)

    Set obj_protocole = obj_dom.createElement("protocole")
    Set protocole_txt = obj_dom.createTextNode(protocole)

    Set obj_code = obj_dom.createElement("code")
    Set code_txt = obj_dom.createTextNode(code)

    Set obj_methode = obj_dom.createElement("methode")
    Set methode_txt = obj_dom.createTextNode(methode)

    poids_attr.appendChild poids_txt
    adresse_attr.appendChild adresse_txt

    obj_document.appendChild document_txt
    obj_protocole.appendChild protocole_txt
    obj_code.appendChild code_txt
    obj_methode.appendChild methode_txt

    obj_client.appendChild obj_document
    obj_client.appendChild obj_protocole
    obj_client.appendChild obj_code
    obj_client.appendChild obj_methode

    racine.appendChild obj_client

    i = i + 1
  Loop

  obj_dom.save(Server.MapPath("fichier_log.xml"))

  obj_log.close
  Set obj_log = Nothing
%>
Fichier : fichier_log.txt
65.116.145.133 - - "GET,/coursjavascript/style.html,HTTP/1.1" 200 16169
212.30.116.74 - - "GET,/javascript/initialisation.js,HTTP/1.1" 200 9065
255.210.164.174 - - "GET,/coursdomxml/objet_element.html,HTTP/1.1" 200 9055
212.220.155.128 - - "GET,/coursdomxml/objet_text.html,HTTP/1.1" 200 8865

2.2.25 / L'objet IXSLProcessor

L'objet IXSLProcessor est utilisé pour les transformations des documents XML à l'aide de feuilles de style XSLT compilées.

Set Objet_Processor = Objet_Template.createProcessor()

La méthode createProcessor de l'objet IXSLTemplate retourne un objet IXSLProcessor.

L'objet IXSLProcessor charge le document XML contenant les données d'entrée par la méthode input.

Objet_Processor.input = Objet_Document

Le processeur possède une méthode transform qui applique les transformations imposées par la feuille de style XSLT préalablement définie dans l'objet IXSLTemplate

Objet_Processor.transform

Enfin, il écrit le résultat dans le flux de sortie spécifié par la méthode output.

Response.Write Objet_Processor.output

Le processeur XSL est complétement indépendant des méthodes transformNode et transformNodeToObject de l'objet DOMDocument. En particulier, lors d'une transformation XML en utilisant l'objet IXSLProcessor, l'événement ontransformnode n'est pas renvoyé sur le DOMDocument.

L'objet IXSLProcessor possède la capacité de passer des valeurs aux paramètres d'une feuille de style définis par <xsl:param...>.

<xsl:param name="Parametre"/>
<xsl:value-of select="//Element[$Parametre]"/>

Objet_Processor.addParameter "Parametre", Valeur
Les Propriétés
Propriété
Description
Set Objet_Node = Objet_Processor.input
indique quelle arborescence d'entrée XML est à transformer.
Set Objet = Objet_Processor.output Objet_Processor.output(output)
fournit un objet de sortie coutumier pour écrire le résultat de la transformation.
Valeur = Objet_Processor.readyState
retourne l'état actuel du processeur.
Objet_XSLProcessor.startMode(Mode)
retourne la partie du mode de démarrage de la base du nom.
espace_nom = Objet_Processor.startModeURI
retourne la partie du mode de démarrage l'adresse URI de l'espace de noms.
Set Objet_Node = Objet_Processor.stylesheet
fournit a feuille de style XSL qui doit être compilée à l'intérieur d'un modèle XSL.
Set Objet_Template = Objet_Processor.ownerTemplate
retourne le moèle de feuille de style qui était utilisé pour créer l'objet IXSLProcessor.
Les Propriétés
Propriété
Description
Objet_Processor.addObject(obj, namespaceURI)
permet de passer des objets à une feuille de style XSL.
Objet_Processor.addParameter(baseName, parameter, namespaceURI)
permet de passer des variables vers une feuille de style XSL.
Objet_Processor.reset
réinitialise l'état du processeur à ce qu'il était avant l'appel de transformation.
Objet_Processor.setStartMode(mode, namespaceURI)
permet d'exécuter des sous-ensembles d'une grande transformation XSL.
true | False = Objet_Processor.transform
démarre le processus de transformation ou reprend une transformation qui a retourné précédemment VARIANT_FALSE.
Exemple [voir]
<%
  Dim Objet_Document
  Dim Objet_Style
  Dim Objet_Template
  Dim Objet_Processor

  Set Objet_Document = Server.CreateObject("MSXML2.DOMDocument")
  Set Objet_Style = Server.CreateObject("MSXML2.FreeThreadedDOMDocument")
  Set Objet_Template = Server.CreateObject("MSXML2.XSLTemplate")

  Objet_Document.async = False
  Objet_Document.Load Server.mapPath("logitheque.xml")

  Objet_Style.async = False
  Objet_Style.Load Server.mapPath("logitheque.xsl")
  Set Objet_Template.stylesheet = Objet_Style

  Set Objet_Processor = Objet_Template.createProcessor()
  Objet_Processor.input = Objet_Document
  Objet_Processor.addParameter "num", 6
  Objet_Processor.Transform
  Response.Write Objet_Processor.output

  Set Objet_Document = Nothing
  Set Objet_Style = Nothing
  Set Objet_Template = Nothing
  Set Objet_Processor = Nothing
%>

2.2.26 / L'objet IXSLTemplate

L'objet IXSLTemplate est utilisé pour les modèles XSLT(Extensible Stylesheet Language Transformations) cachées.

Set Objet_Template = _
                  Server.CreateObject("MSXML2.XSLTemplate")

Avant la version 2.6 de l'analyseur XML de Microsoft, chaque appel vers la méthode transformNode ou transformNodeToObject devait recompiler la feuille de style car celle-ci était simplement passée comme un objet IXMLDOMNode. Désormais, il est possible d'augmenter le performances en cachant la feuille de style compilée et en la réutilisant avec l'objet IXSLTemplate.

Pour mettre en cache une feuille de style compilée, il faut la charger à l'intérieur d'un objet IXSLTemplate. Ce-dernier est une unité d'exécution libre (free-threaded) et est apatride, ainsi il peut être stocké dans l'état d'application ASP partagé. Alors pour transformer un document donné employant ce modèle, il est nécessaire de créer un objet IXSLProcessor employant la méthode createProcessor. L'objet IXSLProcessor stocke l'état pour que celui-ci transforme l'appel et possède un modèle rental-threading.

Set Objet_Style = _
        Server.CreateObject("MSXML2.FreeThreadedDOMDocument")
Objet_Style.Load "style.xsl"
Set Objet_Template.stylesheet = Objet_Style
Set Objet_Processor = Objet_Template.createProcessor()
Objet_Processor.input = Objet_Document
Objet_Processor.Transform
Response.Write Objet_Processor.output
Les Propriétés
Propriété
Description
Set Objet_Node = Objet_Template.stylesheet
fournit les feuilles de style XSL à compiler à l'intérieur d'un modèle XSL.
Les Méthodes
Méthode
Description
Set Objet_Processor = Objet_Template.createProcessor
crée un objet XSLProcessor de modèle de location qui utilise le IXSLTemplate.
Exemple [voir]
<%
  Dim Objet_Document
  Dim Objet_Style
  Dim Objet_Template
  Dim Objet_Processor

  Set Objet_Document = Server.CreateObject("MSXML2.DOMDocument")
  Set Objet_Style = Server.CreateObject("MSXML2.FreeThreadedDOMDocument")
  Set Objet_Template = Server.CreateObject("MSXML2.XSLTemplate")

  Objet_Document.async = False
  Objet_Document.Load Server.mapPath("logitheque.xml")
  Set Objet_Erreur = Objet_Document.parseError
  If Objet_Erreur.errorCode <> 0 Then
    Response.Write "<h3>Le chargement a échoué.</h3>" _
             & "<br>Une erreur d'analyse s'est produite." _
             & "<br>Code : " & Objet_Erreur.errorCode _
             & "<br>Raison : " & Objet_Erreur.reason _
             & "<br>Texte : " & Objet_Erreur.srcText _
             & "<br>URL : " & Objet_Erreur.url _
             & "<br>Position : " & Objet_Erreur.filePos _
             & "<br>Ligne : " & Objet_Erreur.line _
             & "<br>Colonne : " & Objet_Erreur.linePos
  Else
    Objet_Style.async = False
    Objet_Style.Load Server.mapPath("logitheque.xsl")
    Set Objet_Template.stylesheet = Objet_Style
    Set Objet_Processor = Objet_Template.createProcessor()
    Objet_Processor.input = Objet_Document
    Objet_Processor.addParameter "num", 6
    Objet_Processor.Transform
    Response.Write Objet_Processor.output
  End If

  Set Objet_Document = Nothing
  Set Objet_Style = Nothing
  Set Objet_Template = Nothing
  Set Objet_Processor = Nothing
%>

3 / Les types de données

x

3.1 / Les types de données

Type Description
bin.base64 représente un style MIME en base 64 encodé en BLOB binaire. La propriété nodeTypedValue retourne l'objet Variant VT_ARRAY.
bin.hex représente un chiffre héxadécimal représentant des octets. La propriété nodeTypedValue retourne l'objet Variant VT_ARRAY.
boolean représente un valeur booléenne 0 ou 1, où 0 correspond à false et 1 à true. La propriété nodeTypedValue retourne l'objet Variant VT_BOOL.
char représente une chaîne de caractères. La propriété nodeTypedValue retourne l'objet Variant VT_BSTR.
date représente une date dans un sous-ensemble de format ISO 8601, sans les données horaires comme 2001-11-03. La propriété nodeTypedValue retourne l'objet Variant VT_DATE.
dateTime représente une date dans un sous-ensemble de format ISO 8601, avec un horaire optionnel et une zone non-optionnel comme 2001-10-09T20:00:10. La propriété nodeTypedValue retourne l'objet Variant VT_DATE.
dateTime.tz représente une date dans un sous-ensemble de format ISO 8601, avec un horaire optionnel et une zone non-optionnel comme 2001-10-09T20:00:10-10:03. La propriété nodeTypedValue retourne l'objet Variant VT_DATE.
fixed.14.4 représente un nombre sur un maximum de 14 chiffres à la gauche du point décimal et de 4 sur la droite. La propriété nodeTypedValue retourne l'objet Variant VT_CY.
float représente un nombre réel avec aucune limite sur les chiffres, et peut potentiellement posséder un signe dominant, des chiffres fractionnels et optionnellement un exposant. Les valeurs sont comprises dans un intervalle de 1.7976931348623157E+308 à 2.2250738585072014E-308. La propriété nodeTypedValue retourne l'objet Variant VT_DOUBLE.
int représente un nombre entier avec un signe optionnel et sans fraction et exposant. La propriété nodeTypedValue retourne l'objet Variant VT_I4.
number représente un nombre sans limite de chiffres et peut potentiellement avoir un signe dominant, des chiffres fractionnels, et un exposant optionnel. Les valeurs sont comprises dans un intervalle de 1.7976931348623157E+308 à 2.2250738585072014E-308. La propriété nodeTypedValue retourne l'objet Variant VT_BSTR.
time représente un horaire dans un sous-ensemble de format ISO 8601, sans date ou zone horaire comme 11:55:10. La propriété nodeTypedValue retourne l'objet Variant VT_DATE.
time.tz représente un horaire dans un sous-ensemble au format ISO 8601, sans date mais avec une zone de temps optionnelle comme 11:1217-11:20. La propriété nodeTypedValue retourne l'objet Variant VT_DATE.
i1 représente un entier représenté dans un octet avec un signe optionnel, pas de fraction et pas d'exposant comme 10, 127 ou -128. La propriété nodeTypedValue retourne l'objet Variant VT_I1.
i2 représente un entier dans un mot avec un signe optionnel et sans fraction et ni exposant comme 1, 806 ou -32768". La propriété nodeTypedValue retourne l'objet Variant VT_I2.
i4 représente un entier sur quatre octets avec un signe optionnel et sans fraction ni exposant comme 1, 806, -32768, 210586, -11110243". La propriété nodeTypedValue retourne l'objet Variant VT_I4.
i8 représente un entier sur huit octets avec un signe optionnel et sans fraction et ni exposant et une précision sur 19 chiffres. Les valeurs sont comprises dans un intervalle de -9,223,372,036,854,775,808 à 9,223,372,036,854,775,807.
r4 représente un nombre réel avec une précision de sept chiffres et peut potentiellement avoir un signe dominant, des chiffres fractionnés et optionnellement un exposant. Les valeurs sont comprises dans un intervalle de 3.40282347E+38F à 1.17549435E-38F. La propriété nodeTypedValue retourne l'objet Variant VT_FLOAT.
r8 représente un nombre réel avec une précision de quinze chiffres et peut potentiellement avoir un signe dominant, des chiffres fractionnés et optionnellement un exposant. Les valeurs sont comprises dans un intervalle de 1.7976931348623157E+308 à 2.2250738585072014E-308. La propriété nodeTypedValue retourne l'objet Variant VT_DOUBLE.
ui1 représente un entier non-signé sans fraction ni exposant comme 1 ou 255. La propriété nodeTypedValue retourne l'objet Variant VT_UI1.
ui2 représente un entier non-signésur deux octets sans fraction ni exposant comme 1, 255 ou 65535. La propriété nodeTypedValue retourne l'objet Variant VT_UI2.
ui4 représente un entier non-signé sur quatre octets sans fraction ni exposant comme 1, 806 ou 12056348912. La propriété nodeTypedValue retourne l'objet Variant VT_UI4.
ui8 représente un entier non-signé sur huit octets sans fraction ni exposant compris dans l'intervalle de 0 à 18,446,744,073,709,551,615.
uri représente un URI (Universal Resource Identifier) comme urn:schemas-microsoft-com:Office9.
uuid représente des chiffres hexadécimaux représentant des octets avec optionnellement traits d'union imbriqués qui sont ignorés comme 333C7BC4-460F-11D0-BC04-0080C7055A83. La propriété nodeTypedValue retourne l'objet Variant VT_BSTR.

3.2 / Les types de données XML primitifs

Les recommandations XML 1.0 du W3C (World Wide Web Consortium) définissent aussi des types énumérés (notations et enumerations) et un ensemble de types de symboles qui se sont référés à des types primitifs dans la documentation XML de Microsoft.

Les Types de données
Type Description
entity représente le type XML ENTITY.
entities représente le type XML ENTITIES.
enumeration représente un type énuméré valable uniquement avec des attributs.
id représente le type XML ID.
idref représente le type XML IDREF.
idrefs représente le type XML IDREFS.
nmtoken représente le type XML NMTOKEN.
nmtokens représente le type XML NMTOKENS.
notation représente le type NOTATION.
string représente le type de chaîne de caractères.

4 / Les constantes

x

4.1 / Les constantes nodales

Les énumérations IXMLDOMNodeType spécifient des désignations valides pour le type de noeud du modèle d'objet du document (DOM). Le type de noeud détermine des valeurs valides et di le noeud peut avoir des noeuds enfants.

Les Types de données
Constante Valeur
Description
NODE_ELEMENT 1 (element)
signifie qu'un noeud représente un élément, la propriété nodeTypeString retournant bien element. Un noeud élément peut avoir les types de noeud enfant : Element, Text, Comment, ProcessingInstruction, CDATASection, et EntityReference. Il peut être l'enfant de noeud Document, DocumentFragment, EntityReference, et Element.
NODE_ATTRIBUTE 2 (attribute)
signifie que le noeud représente un attribut ou un élément, la propriété nodeTypeString retournant attribute. Un noeud attribut peut avoir les types de noeud enfant : Text et EntityReference. Il n'apparaît pas comme un noeud enfant de n'importe quel type de noeud car n'étant pas considéré comme un noeud enfant d'un élément.
NODE_TEXT 3 (text)
signifie que le noeud représente le contenu textuel d'une balise, la propriété nodeTypeString retournant text. Un noeud textuel ne peut avoir des noeuds enfants. Le noeud textuel peut apparaître comme le noeud enfant d'un attribut, d'un fragment de document, d'un élément, et d'un référence d'entité.
NODE_CDATA_SECTION 4 (cdatasection)
signifie que le noeud représente un section CDATA (Character DATA), la propriété nodeTypeString retournant cdatasection. Les sections CDATA sont utilisées comme des blocs de textes qui ne seraient pas analysés comme du marquage XML. Un noeud CDATASection ne peut avoir de noeuds enfants. Il peut apparaître comme un enfant des noeuds DocumentFragment, EntityReference, et Element.
NODE_ENTITY_REFERENCE 5 (entityreference)
signifie que le noeud représente une référence à une entité dans le document XML, la propriété nodeTypeString retournant entityreference. Le noeud de référence d'entité s'applique à toutes les entités. Un noeud EntityReference peut avoir les types de noeud enfant : Element, ProcessingInstruction, Comment, Text, CDATASection, et EntityReference. Ce noeud peut apparaître comme l'enfant d'un attribut, d'un fragement de document d'un élément ou d'une référence d'entité.
NODE_ENTITY 6 (entity)
signifie que le noeud représente un entité développée, la propriété nodeTypeString retournant entity. Un noeud d'entité peut avoir des noeuds enfants qui représente l'entité développée comme des noeuds Text et EntityReference. Il peut apparaître comme le noeud enfant de DocumentType.
NODE_PROCESSING_INSTRUCTION 7 (processinginstruction)
signifie que le noeud représente une instruction de traitement, la propriété nodeTypeString retournant processinginstruction. Un noeud ProcessingInstruction ne peut avoir n'importe quel noeud enfant. Il peut appraître comme l'enfant des noeuds Document, DocumentFragment, Element, et EntityReference.
NODE_COMMENT 8 (comment)
signifie que le noeud représente un commentaire, la propriété nodeTypeString retournant comment. Un noeud Comment ne peut avoir de noeuds enfants. Il peut apparaître comme l'enfant de noeuds Document, DocumentFragment, Element, et EntityReference.
NODE_DOCUMENT 9 (document)
signifie que le noeud représente un document, soit la racine de l'arborescence d'un document XML, la propriété nodeTypeString retournant document. Ce noeud fournit un accès au document complet. Il est créé en utilisant l'identificateur ProgID Microsoft.XMLDOM ou par l'intermédiaire d'un ilôt de données (data island) en utilisant les balises <XML> ou <script language="XML">. Un noeud Document peut avoir les types de noeud enfant : Element (maximum of one), ProcessingInstruction, Comment, et DocumentType. Il ne peut apparaître comme un enfant d'un autre type de noeud.
NODE_DOCUMENT_TYPE 10 (documenttype)
signifie que le noeud représente un déclaration de type de document (DTD) indiquée par la balise <!DOCTYPE>, la propriété nodeTypeString retournant documenttype. Un noeud DocumentType peut avoir les types de noeud enfant : Notation et Entity. Il peut apparaître comme l'enfant d'un noeud Document.
NODE_DOCUMENT_FRAGMENT 11 (documentfragment)
signifie que le noeud représente un fragment de document, la propriété nodeTypeString retournant documentfragment. Le noeud DocumentFragment associe un noeud ou une sous-arborescence avec un document sans en réalité être contenu dans le document. Il peut avoir les types de noeud d'enfant : Element, ProcessingInstruction, Comment, Text, CDATASection, et EntityReference. Le noeud DocumentFragment ne peut pas apparaître comme l'enfant d'un type de noeud.
NODE_NOTATION 12 (notation)
signifie que le noeud représente une notation dans la DTD (document type declaration), la propriété nodeTypeString retournant notation. Un noeud Notation ne peut avoir de noeuds enfants. Il peut apparaître comme l'enfant du noeud DocumentType.

4.2 / Les valeurs optionnelles

Les codes cités ci-dessous, permettent de fixer des options pour les méthodes getOption ou SetOption de l'objet IServerXMLHTTPRequest.

Valeur = Objet_ServerXMLHTTPRequest.getOption(option)

Objet_ServerXMLHTTPRequest.setOption(option) = Valeur
Constante Valeur
Description
SXH_OPTION_URL_CODEPAGE 0
signifie que la page de code (CodePage) est utilisée pour convertir la chaîne de caractères Unicode, représentant une adresse URL, spécifiée dans la méthode open.
SXH_OPTION_ESCAPE_PERCENT_IN_URL 1
par défaut, signifie que le caractère d'échappement pourcent % est utilisé dans une URL pour traduire des caractères dangereux.
SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS 2
signifie que l'indicateur peut être fixé pour ignorer les problèmes avec le certificat SSL (Secure Sockets Layer) du serveur.
SXH_OPTION_SELECT_CLIENT_SSL_CERT 3
signifie que le nom du certificat client spécifié est stocké localement.

4.3 / Le statut de la requête

Le statut de la requête obtenu à partir de la requête la propriété readyState est représenté par un entier sur quatre octets.

Valeur = Objet_HttpRequest.readyState
Constante Valeur
Description
UNINITIALIZED 0
L'objet a été créé, mais pas initialisé, c'est-à-dire que la méthode open n'a pas été appelé.
LOADING 1
L'objet a été créé, mais la méthode send n'a pas été appelé.
LOADED 2
La méthode send a été appelé et les statuts des entêtes sont disponibles, mais la réponse n'est pas encore disponible.
INTERACTIVE 3
Plusieurs données ont été reçues. Il est possible d'appeler les propriétés responseBody et responseText pour obtenir les résultats partiels courants.
COMPLETED 4
Toutes les données ont été reçues, et les données complètes sont disponibles dans les propriétés responseBody et responseText.

5 / Les formats

x

5.1 / Les formats d'index

Les codes cités ci-dessous, permettent de formater un index de liste par exemple, à partir de la méthode FormatIndex de l'objet IXTLRuntime.

Valeur = Objet_Runtime.formatIndex(Index, Format_Index)
Code Description
1 affiche un index selon un système de numérotation standard.
01 affiche un index selon un système de numérotation avec des zéros non-significatifs.
a affiche un index selon un séquence de lettres majuscules de A[A] à Z[Z]
a affiche un index selon un séquence de lettres minuscules de a[a] à z[z].
i affiche un index selon la numérotation romaine en majuscules (I, II, III,...).
i affiche un index selon la numérotation romaine en minuscules (i, ii, iii,...).

5.2 / Les formats de nombre

Les codes cités ci-dessous, permettent de formater une valeur numérique à partir de la méthode FormatNumber de l'objet IXTLRuntime.

Valeur = Objet_Runtime.formatNumber(Nombre, Format_Nombre)
Code Description
# affiche seulement les chiffres significatifs hormis les zéros non-significatifs.
0 affiche des zéros non-significatifs.
? ajoute des espaces pour des zéros non-significatifs de chaque côté du point décimal afin que les points décimaux s'alignent sur une police de point fixe. Il est également possible d'utiliser ce symbole pour des fractions qui ont des nombres variés de chiffres.
. indique la position du point décimal à l'intérieur d'un nombre.
, affiche une virgule comme séparateur des milliers.
% affiche un nombre comme un pourcentage.
E-
e-
affiche un nombre dans le format scientifique, en fait la notation exponentielle.
E+
e+
place un signe moins pour des exposants négatifs et un signe plus pour les exposants positifs.

5.3 / Les formats de date

Les codes cités ci-dessous, permettent de formater une date à partir de la méthode FormatIndex de l'objet IXTLRuntime.

Valeur = Objet_Runtime.formatDate(Index, _
                                 Format_Date, Destination_Locale)
Code Description
M affiche les mois de 1 à 12.
MM affiche les mois de 01 à 12
MMM affiche les mois de Jan à Dec.
MMMM affiche les mois de Janvier à Décembre.
MMMMM affiche les mois comme la première lettre des mois.
d affiche les jours de 1 à 31
dd affiche les jours de 01 à 31
ddd affiche les jours de Dim à Sam
dddd affiche les jours de Dimanche à Samedi
yy affiche l'année de 00 à 99
yyyy affiche l'année de 1900 à 9999

5.4 / Les formats horaires

Les codes cités ci-dessous, permettent de formater une valeur horaire à partir de la méthode FormatTime de l'objet IXTLRuntime.

Valeur = Objet_Runtime.formatTime(Valeur_Temps, _
                                             Format_Temps, Destination_Locale)
Code Description
h représente les heures sous le format 0 à 23
hh représente les heures sous le format 00 à 23
m représente les minutes sous le format 0 à 59
mm représente les minutes sous le format 00 à 59
s représente les secondes sous le format 0 à 59
ss représente les minutes sous le format 00 à 59
AM/PM insère un AM ou un PM pour un affichage sur douze heures.
am/pm insère un am ou un pm pour un affichage sur douze heures.
A/P insère un a ou un p pour un affichage sur douze heures.
a insère un a ou un p pour un affichage sur douze heures.
[h]:mm permet de laisser le temps s'écouler au-delà de la limite des 23 heures (25:15).
[mm]:ss permet de laisser le temps s'écouler au-delà de la limite des 59 minutes (68:15).
[ss] permet de laisser le temps s'écouler au-delà de la limite des 59 secondes (62).
ss.00 affiche une fraction de secondes.

6 / Les erreurs

x

6.1 / Messages d'erreur de l'objet IXMLParseError

Erreur
Description
MSG_E_FORMATINDEX_BADINDEX
La valeur passée dans formatIndex a besoin d'être plus grand que zero.
MSG_E_FORMATINDEX_BADFORMAT
Le format de la chaîne de caractères et invalide.
MSG_E_SYSTEM_ERROR
Erreur système : %1.
MSG_E_MISSINGEQUALS
Le signe égal (=) est manquant entre l'attribut et sa valeur.
MSG_E_EXPECTED_TOKEN
Le symbole %1 est attendu, trouvé %2.
MSG_E_UNEXPECTED_TOKEN
Le symbole %1 n'est pas attendu.
MSG_E_MISSINGQUOTE
Un litéral chaîne de caractères a été attendu, mais n'est pas ouvert par un guillemet.
MSG_E_COMMENTSYNTAX
Une syntaxe incorrecte a été utilisée dans un commentaire.
MSG_E_BADSTARTNAMECHAR
Un nom a été commencé avec un caractère invalide.
MSG_E_BADNAMECHAR
Un nom contient un caractère invalide.
MSG_E_BADCHARINSTRING
Le caractère < ne peut être utilisé dans une valeur d'attribut.
MSG_E_XMLDECLSYNTAX
La syntaxe est invalide pour une déclaration XML.
MSG_E_BADCHARDATA
Un caractère invalide a été trouvé dans le contenu textuel.
MSG_E_MISSINGWHITESPACE
Un espace blanc requis est manquant.
MSG_E_EXPECTINGTAGEND
Le caractère > était attendu.
MSG_E_BADCHARINDTD
Un caractère invalide a été trouvé dans le DTD.
MSG_E_BADCHARINDECL
Un caractère invalide a été trouvé à l'intérieur d'une déclaration de DTD.
MSG_E_MISSINGSEMICOLON
Un caractère point-virgule était attendu.
MSG_E_BADCHARINENTREF
Un caractère invalide a été trouvé à l'intérieur d'une référence d'entité.
MSG_E_UNBALANCEDPAREN
Les paranthèses sont anormales.
MSG_E_EXPECTINGOPENBRACKET
Un caractère d'ouverture ([) était attendu.
MSG_E_BADENDCONDSECT
La syntaxe est invalide dans une section conditionnelle.
MSG_E_INTERNALERROR
Une erreur interne est survenu.
MSG_E_UNEXPECTED_WHITESPACE
Un espace blanc n'est pas permis à cet endroit.
MSG_E_INCOMPLETE_ENCODING
La fin de fichier (EOF) a été atteinte dans un état invalide pour l'encodage courant.
MSG_E_BADCHARINMIXEDMODEL
Le modèle de contenu mixte ne peut contenir ce caractère.
MSG_E_MISSING_STAR
Le modèle de contenu mixte doit être défini comme un zero ou plus ("*").
MSG_E_BADCHARINMODEL
Un caractère invalide a été trouvé dans le modèle de contenu.
MSG_E_MISSING_PAREN
Un paranthèse est manquante.
MSG_E_BADCHARINENUMERATION
Un caractère invalide a été trouvé dans l'énumération ATTLIST.
MSG_E_PIDECLSYNTAX
La syntaxe est invalide dans une décalration d'instruction de traitement.
MSG_E_EXPECTINGCLOSEQUOTE
Un simple (') ou un double guillemet (") de fermeture est manquant.
MSG_E_MULTIPLE_COLONS
De multiples doubles-points ne sont pas permis dans un nom.
MSG_E_INVALID_DECIMAL
Un caractère invalide a été trouvé pour un chiffre décimal.
MSG_E_INVALID_HEXADECIMAL
Un caractère invalide a été trouvé pour un chiffre hexadécimal.
MSG_E_INVALID_UNICODE
Une valeur de caractère Unicode invalide a été trouvée pour cette plateforme.
MSG_E_WHITESPACEORQUESTIONMARK
Un espace blanc ou un point d'interrogation (?)est attendu.
MSG_E_SUSPENDED
L'analyseur est suspendu.
MSG_E_STOPPED
L'analyseur est stoppé.
MSG_E_UNEXPECTEDENDTAG
La fin d'une balise a été attendue à cet endroit.
MSG_E_UNCLOSEDTAG
Les balises suivantes n'étaient pas fermées : %1.
MSG_E_DUPLICATEATTRIBUTE
Un attribut est double.
MSG_E_MULTIPLEROOTS
Un seul élément racine est permis dans un document XML.
MSG_E_INVALIDATROOTLEVEL
La racine du document est invalide.
MSG_E_BADXMLDECL
La déclaration XML est invalide.
MSG_E_MISSINGROOT
Le document XML doit avoir un élément racine.
MSG_E_UNEXPECTEDEOF
La fin de fichier (EOF) n'est pas attenue.
MSG_E_BADPEREFINSUBSET
Les entités paramètres ne peuvent être utilisées à l'intérieur de déclarations de marquage dans un sous ensemble interne.
MSG_E_PE_NESTING
Le texte de remplacement pour une entité paramètre doit être convenablement encadrées par des paranthèses.
MSG_E_INVALID_CDATACLOSINGTAG
La chaîne de caractères ]]> n'est pas permisedans le contenu d'un élément.
MSG_E_UNCLOSEDPI
L'instruction de traitement n'a pas été fermée.
MSG_E_UNCLOSEDSTARTTAG
L'élément n'était pas fermé.
MSG_E_UNCLOSEDENDTAG
Le caractère de fin (>) d'un élément était manquant.
MSG_E_UNCLOSEDSTRING
Un littéral chaine de caractères n'était pas fermé.
MSG_E_UNCLOSEDCOMMENT
Un commentaire n'était pas fermé.
MSG_E_UNCLOSEDDECL
Une déclaration n'était pas fermée.
MSG_E_UNCLOSEDMARKUPDECL
Une déclaration de marquage n'était pas fermée.
MSG_E_UNCLOSEDCDATA
Une section CDATA n'était pas fermée.
MSG_E_BADDECLNAME
La déclaration a un nom invalide.
MSG_E_BADEXTERNALID
L'identificateur ID externe est invalide.
MSG_E_BADELEMENTINDTD
Un élément XML n'est pas permisà l'intéérieur d'une DTD.
MSG_E_RESERVEDNAMESPACE
Le préfixe d'espace de noms xml et ses variantes de casse n'est pas permis.
MSG_E_EXPECTING_VERSION
L'attribut version est requis à cet endroit.
MSG_E_EXPECTING_ENCODING
L'attribut encoding est requis à cet endroit.
MSG_E_EXPECTING_NAME
Au moins un nom est requis à cet endroit.
MSG_E_UNEXPECTED_ATTRIBUTE
L'attribut specified n'était pas attendu à cet endroit. L'attribut est sensible à la casse.
MSG_E_ENDTAGMISMATCH
La fin de balise %2 ne correspond pas à la balise de début %1.
MSG_E_INVALIDENCODING
Le système ne supporte pas l'encodage spécifié.
MSG_E_INVALIDSWITCH
Le changement de l'encodage courant n'est pas supporté.
MSG_E_EXPECTING_NDATA
Le mot-clé NDATA est manquant.
MSG_E_INVALID_MODEL
Le modèle de contenu est invalide.
MSG_E_INVALID_TYPE
Le type défini dans ATTLIST est invalide.
MSG_E_INVALIDXMLSPACE
L'attribut XML space a une valeur invalide. Il doit indiquer default ou preserve.
MSG_E_MULTI_ATTR_VALUE
De multiples noms ont été trouvés dans la valeur d'attribut alors qu'un seul était attendu.
MSG_E_INVALID_PRESENCE
La déclaration ATTDEF est invalide. Il est attendu #REQUIRED, #IMPLIED, ou #FIXED.
MSG_E_BADXMLCASE
Le nom XML est réservé est doit être en cass minuscule.
MSG_E_CONDSECTINSUBSET
Les sections conditionnelles ne sont pas permises dans un sous ensemble interne.
MSG_E_CDATAINVALID
La section CDATA n'est pas permise dans un DTD.
MSG_E_INVALID_STANDALONE
L'attribut standalone doit avoir la valeur yes ou no.
MSG_E_UNEXPECTED_STANDALONE
L'attribut standalone ne peut être utilisé dans des entités externes.
MSG_E_DOCTYPE_IN_DTD
Un DTD ne peut avoir une déclaration DOCTYPE.
MSG_E_MISSING_ENTITY
L'entité à laquelle il est fait référence est indéfinie.
MSG_E_ENTITYREF_INNAME
La référence d'entité est résolue à un caractère de nom invalide.
MSG_E_DOCTYPE_OUTSIDE_PROLOG
Il ne peut y avoir de déclaration DOCTYPE en dehors d'un prologue.
MSG_E_INVALID_VERSION
Le numéro de version est invalide.
MSG_E_DTDELEMENT_OUTSIDE_DTD
Il ne peut y avoir de déclaration de DTD en dehors d'un DTD.
MSG_E_DUPLICATEDOCTYPE
Il ne peut y avoir de multiples déclarations DOCTYPE.
MSG_E_RESOURCE
Un erreur de traitement de ressource %1 est survenue.
XML_IOERROR
Une erreur d'ouverture d'un fichier d'entrée %1 est survenue.
XML_ENTITY_UNDEFINED
Une référence a une entité indéfinie est survenue %1.
XML_INFINITE_ENTITY_LOOP
L'entité %1 contient une boucle sur une référence d'entité infinie.
XML_NDATA_INVALID_PE
Il ne peut y avoir le mot clé NDATA dans une déclaration d'entité paramètre.
XML_REQUIRED_NDATA
Il n'est pas possible d'utiliser une entité générale analysée %1 comme la valeur pour l'attribut %2.
XML_NDATA_INVALID_REF
Il n'est pas possible d'utiliser une entité générale non-analysée dans une référence d'entité.
XML_EXTENT_IN_ATTR
Il n'est pas possible de se référer à une entité générale analysée dans une valeur d'attribut.
XML_STOPPED_BY_USER
L'analyseur XML a été arrêté par l'utilisateur.
XML_PARSING_ENTITY
Une erreur s'est produite au moment de l'analyse d'entité %1. %2.
XML_E_MISSING_PE_ENTITY
L'entité paramètre doit être définie avant son utilisation.
XML_E_MIXEDCONTENT_DUP_NAME
Le même nom doit apparaître plus d'une fois dans une unique déclaration de contenu mixte %1.
XML_NAME_COLON
Une entité, une référence d'entité, une instruction de traîtement, les noms de notation ou les valeurs NMToken ne peut contenir un double-point (:).
XML_ELEMENT_UNDECLARED
L'élément %1 est utilisé alors qu'il n'a pas été déclaré dans un DTD ou un schéma.
XML_ELEMENT_ID_NOT_FOUND
L'attribut %1 se référe à l'identificateur ID %2, lequel n'est pas défini 'nimporte où dans le document.
XML_DEFAULT_ATTRIBUTE
Une erreur dans la valeur d'attribut par défaut définie dans le DTD ou le schéma est survenue.
XML_XMLNS_RESERVED
L'espace de noms réservé %1 ne peut être redéclaré.
XML_EMPTY_NOT_ALLOWED
L'élément ne peut être vide en accord avec le DTD ou le schéma.
XML_ELEMENT_NOT_COMPLETE
Le contenu de l'élément est incomplet en accord avec le DTD ou le schéma.
XML_ROOT_NAME_MISMATCH
Le nom de l'élément racine doit correspondre au nom de la déclaration DOCTYPE.
XML_INVALID_CONTENT
Le contenu de l'élément est invalide en accord avec le DTD ou le schéma.
XML_ATTRIBUTE_NOT_DEFINED
L'attribut %1 de cet élément n'est pas défini dans le DTD ou le schéma.
XML_ATTRIBUTE_FIXED
L'attribut %1 a une valeur qui ne correspond pas à la valeur fixée définie dans le DTD ou le schéma.
XML_ATTRIBUTE_VALUE
L'attribut %1 a une valeur invalide en accord avec le DTD ou le schéma.
XML_ILLEGAL_TEXT
Le texte n'est pas permis dans cet élément en accord avec le DTD ou le schéma.
XML_MULTI_FIXED_VALUES
Une déclaration d'attribut ne peut contenir de multiples valeurs fixées %1.
XML_NOTATION_DEFINED
La notation %1 est déjà déclarée.
XML_ELEMENT_DEFINED
L'élément %1 est déjà déclaré.
XML_ELEMENT_UNDEFINED
Un référence à un élément non-déclaré est survenu %1.
XML_XMLNS_UNDEFINED
RUne référence à un préfixe d'espace de noms est survenu %1.
XML_XMLNS_FIXED
L'attribut %1 doit être un attribut #FIXED.
XML_E_UNKNOWNERROR
Une erreur inconnue s'est produite %1.
XML_REQUIRED_ATTRIBUTE_MISSING
L'attribut requis %1 est manquant.
XML_MISSING_NOTATION
La déclaration %1 contient une référence à une notation indéfinie %2.
XML_ATTLIST_DUPLICATED_ID
Il n'est pas possible de définir de multiples attributs ID sur le même élément.
XML_ATTLIST_ID_PRESENCE
Un attribut de type ID doit avoir par défaut déclaré un #IMPLIED ou #REQUIRED.
XML_XMLLANG_INVALIDID
Le langage ID %1 est invalide.
XML_PUBLICID_INVALID
L'ID public %1 est invalide.
XML_DTD_EXPECTING
Attendu %1.
XML_NAMESPACE_URI_EMPTY
Seulement un espace de noms par défaut peut avoir un URI vide.
XML_LOAD_EXTERNALENTITY
Il ne peut charger une entité externe %1.
XML_BAD_ENCODING
Il est incapable de sauvegarder le caractère vers l'encodage.
SCHEMA_ATTRIBUTEVALUE_NOSUPPORT
Un espace de noms non-supporté a été trouvé à cet endroit.
SCHEMA_SCHEMAROOT_EXPECTED
Un définition incorrecte pour l'élément racine a été trouvée dans le schéma.
SCHEMA_ELEMENT_NOSUPPORT
L'élément %1 n'est pas autorisé dans ce contexte.
SCHEMA_ETNAME_MISSING
Une déclaration ElementType doit contenir un attribut name.
SCHEMA_ETYPE_MISSING
Une déclaration d'élément doit contenir un attribut type.
SCHEMA_ETORDER_UNKNOWN
Le schéma supporte seulement les types d'ordre seq, one, et many.
SCHEMA_ELEMENTDT_NOSUPPORT
Le contenu doit être textOnly en utilisant des types de données sur un ElementType.
SCHEMA_ETORDER_DISABLED
L'ordre doit être many lorsque le contenu est mixed.
SCHEMA_ETCONTENT_UNKNOWN
Le contenu doit être de type empty, eltOnly, textOnly, ou mixed.
SCHEMA_ETMODEL_UNKNOWN
La valeur du modèle doit être soit open ou closed.
SCHEMA_ELEMENT_DISABLED
Il ne peut contenir d'éléments enfants car le contenu est fixé à textOnly.
SCHEMA_ELEMENT_MISSING
Il doit fournir au moins un élément dans un groupe.
SCHEMA_ATTRIBUTE_NOTSUPPORT
L'attribut %1 sur un %2 n'est pas supporté.
SCHEMA_ATNAME_MISSING
La déclaration AttributeType doit dontenir un attribut name.
SCHEMA_ATNAME_DUPLICATED
La déclaration d'attribut est double.
SCHEMA_ATREQUIRED_INVALID
La valeur pour l'attribut required est invalide.
SCHEMA_DTTYPE_UNKNOWN
Le type de donnée de l'attribut est inconnu.
SCHEMA_DTTYPE_DUPLICATED
La déclaration du type de donnée est double.
SCHEMA_ENUMERATION_MISSING
Un élément avec un attribut values doit contenir un attribut type à la valeur enumeration.
SCHEMA_DTVALUES_MISSING
Il doit fournir un attribut values sur un élément qui contient un attribut type à la valeur enumeration.
SCHEMA_ATYPE_MISSING
La déclaration d'attribut doit contenir un attribut type.
SCHEMA_ATYPE_UNDECLARED
L'attribut spécifié doit être d'abord déclaré en utilisant une déclaration AttributeType.
SCHEMA_GROUP_DISABLED
Un group n'est pas autorisé à l'intérieur d'un ElementType qui a un modèle de contenu textOnly.
SCHEMA_GMATTRIBUTE_NOTSUPPORT
L'attribut %1 sur un groupe n'est pas supporté.
SCHEMA_DTVALUES_VALUES_MISSING
Les valeurs pour les types d'énumération sont manquantes.
SCHEMA_ATTRIBUTE_DEFAULTVALUE
La valeur par défaut %1 est invalide.
SCHEMA_DTTYPE_DISABLED
Le type de données n'est pas permis lorsque le modèle de contenu n'est pas en textOnly.
SCHEMA_ELEMENT_EMPTY
L'élément enfant n'est pas autorisé lorsque le modèle de contenu est empty.
SCHEMA_ELEMENT_DATATYPE
L'élément enfant n'est pas autorisé lorsque le type de données est fixé.
SCHEMA_DTTYPE_MISSING
Le type est manquant sur l'élément datatype.
SCHEMA_MINOCCURS_INVALIDVALUE
La valeur de l'attribut minOccurs doit être 0 ou 1.
SCHEMA_MAXOCCURS_INVALIDVALUE
La valeur de l'attribut maxOccurs doit être 1 ou *.
SCHEMA_MAXOCCURS_MUSTBESTAR
La valeur de l'attribut maxOccurs doit être * lorsque l'attribut order est fixé à many.
SCHEMA_ELEMENTDT_EMPTY
La valeur de l'attribut datatype ne peut être vide.
SCHEMA_DOCTYPE_INVALID
Le DOCTYPE n'est pas permis dans un schéma.

6.2 / Les autres erreurs

Les types d'erreur
DOM XSL
XQL MIME
Erreur
Description
Les erreurs du DOM (Document Object Model)
XMLOM_DUPLICATE_ID
L'ID %1 est double.
XMLOM_DATATYPE_PARSE_ERROR
Une erreur d'analyseur %1 comme le type de données %2 s'est produite.
XMLOM_NAMESPACE_CONFLICT
Il y a un conflit d'espace de noms pour l'espace de noms %1.
XMLOM_OBJECT_EXPAND_NOTIMPL
Il est incapable de développer un attribut avec la valeur object.
XMLOM_DTDT_DUP
Il n'est pas possible d'avoir deux attributs datatype dans un élément.
XMLOM_INSERTPOS_NOTFOUND
Le noeud de position inséré n'est pas trouvé.
XMLOM_NODE_NOTFOUND
Le noeud n'est pas trouvé.
XMLOM_INVALIDTYPE
Cette opération ne peut être exécutée avec un noeud de type %1.
XMLOM_INVALID_XMLDECL_ATTR
%1 n'est pas un attribut valide sur la déclaration XML, seuls les attributs version, encoding, ou standalone sont autorisés.
XMLOM_INVALID_INSERT_PARENT
L'insertion d'un noeud ou de son ancêtre sous lui-même n'est pas autorisée.
XMLOM_INVALID_INSERT_POS
Le noeud de position inséré doit être un enfant du noeud à insérer en-dessous.
XMLOM_NO_ATTRIBUTES
Les attributs ne sont pas permis sur les noeuds de type %1.
XMLOM_NOTCHILD
Le noeud paramètre n'est pas un enfant de ce noeud.
XMLOM_CREATENODE_NEEDNAME
createNode requiert un nom pour nodeType donné.
XMLOM_UNEXPECTED_NS
Le paramètre d'espace de noms est inattendu.
XMLOM_MISSING_PARAM
Le paramètre requis est manquant ou nulle ou bien vide.
XMLOM_INVALID_NAMESPACENODE
Un noeud d'espace de noms est invalide.
XMLOM_READONLY
Une tentative de modification a été effectuée sur un noeud en lecture seule.
XMLOM_ACCESSDENIED
L'accès est refusé.
XMLOM_ATTRMOVE
Les attributs doivent être enlevés avant leur ajout à un noeud différent.
XMLOM_BADVALUE
Les données sont invalides pour un type de noeud %1.
XMLOM_USERABORT
l'opération a été annulée par un demandeur.
XMLOM_NEXTNODEABORT
Il est incapable de récupérer la position de l'itérateur de la liste de noeud.
XMLOM_INVALID_INDEX
L'index doit être zero ou un nombre positif qui n'est pas plus grand que le nombre de caractères dans les données.
XMLOM_INVALID_ATTR
Le noeud fourni n'est pas un attribut spécifié sur ce noeud.
XMLOM_INVALID_ONDOCTYPE
Cette opération ne peut être exécutée sur un noeud DOCTYPE.
XMLOM_INVALID_MODEL
Il n'est pas possible de mélanger des modèles différents de threading dans le document.
XMLOM_INVALID_DATATYPE
Le type de donnée %1 n'est pas supporté.
Les erreurs XSL (eXtended Stylesheet Language)
XSL_PROCESSOR_STACKOVERFLOW
La pile du processeur XSLT a provoqué un dépassement de mémoire probablement provoqué par un modèle récursif infini.
XSL_PROCESSOR_UNEXPECTEDKEYWORD
Le mot clé %1 ne peut être utilisé ici.
XSL_PROCESSOR_BADROOTELEMENT
L'élément racine de la feuille de style XSLT doit être <xsl:document> ou <xsl:template>.
XSL_PROCESSOR_KEYWORDMAYNOTFOLLOW
Le mot clé %1 ne peut pas suivre %2.
XSL_PROCESSOR_INVALIDSCRIPTENGINE
%1 n'est pas en langage de script.
XSL_PROCESSOR_SCRIPTERROR_LINE
Une ereur de script s'est produite à la ligne = %1, et la colonne = %2.
XSL_PROCESSOR_METHODERROR
Une erreur a été retournée à partir d'un appel de méthode ou de propriété.
XSL_KEYWORD_MAYNOTCONTAIN
Le mot clé %1 peut ne pas contenur %2.
Les erreurs XQL (XML Query Language)
XQL_EXPR_NOT_DOM_NODE
L'expression ne retourne pas un noeud DOM (DOMNode).
XQL_EXPR_NOT_QUERY_OR_INTEGER
L'expression doit être une requête ou une constante de nombre entier.
XQL_INCOMPLETE_QUERY
L'expression de requête est incomplète.
XQL_UNKNOWN_METHOD
La méthode est inconnue.
XQL_UNEXPECTED_CHAR
Un caractère inattendu a été trouvé dans la requête.
XQL_QUERY_INVALID_HERE
%1 peut ne pas apparaître à la droite de / ou // ou bien être utilisé avec |.
XQL_EXPR_NOT_STRING
Expression must be a string constant.
XQL_METHOD_NOT_SUPPORTED
L'objet ne supporte pas cette méthode.
XQL_INVALID_CAST
L'expression ne peut être lancé avec ce type de donnée.
XMLISLANDS_NOSCRIPTLETS
Le moteur de script XML ne supporte pas les fragments de script. Cette erreur a été probablement provoqué en ayant une balise de script avec l'attribut de langue fixé à "XML" ou l'attribut de texte fixé à "text/xml" avant une autre balise de script sur la page.
XQL_EXPR_NOT_QUERY_OR_STRING
Le paramètre doit être une requête ou une constante de chaîne de caractères.
XQL_EXPR_NOT_INTEGER
Le paramètre doit être une constante en nombre entier.
Les erreurs MIME (Multipurpose Internet Mail Extension)
XMLMIME_ERROR
La page XML ne peut être affichée. Il est impossible de voir l'entrée XML en utilisat la feuille de style.
XMLMIME_LINEPOS
Ligne %1, Position %2
XMLMIME_SOURCENA
Le fichier source XML est indisponible pour l'affichage.

7 / Les ilôts de données

Les ilôts de données dans un page HTML permettent d'importer des informations XML à l'intérieur d'un balisage spécifique.

L'insertion d'un ilôt de données s'effectue par l'intermédiaire d'une balise <XML>.

<xml id="Identificateur">...</xml>

Le balisage précité peut soit contenir un arborescence XML valide, soit comprendre un attribut src pointant vers une page XML.

<xml id="Identificateur" src="Adresse"></xml>

Il est également possible d'intégrer des ilôts de données XML par l'intermédaire des balises <script> avec des valeurs d'attributs particulières.

<script type="text/xml" id="Identificateur">
  Données XML...
</script>
<script language="xml" id="Identificateur">
  Données XML...
</script>

L'extraction des données s'accomplit en utilisant plusieurs attributs particuliers associés à certaines balises HTML standards capables de recevoir des informations textuelles, tels que <table> comme conteneur, <div>, <input> ou encore <span> pour afficher les informations XML.

<balise_Conteneur datasrc="#Identificateur_XML">
  <balise datafld="Nom_Elément_XML"></balise>
</balise_Conteneur>

<table datasrc="#Identificateur">
  <tr>
    <td>
      <input type="text" datafld="Nom_Elément"></input>
    </td>
  </tr>
</table>

L'attribut DATAFLD accepte les niveaux hiérarchiques afin de localiser distinctement les éléments à afficher par rapport à leurs ancêtres dans l'arborescence de l'ilôt de données XML. Les éléments parent et enfant sont combinés au sein de l'attribut DATAFLD par l'intermédiaire d'un point

<Elément_Racine>
  <Sous_Elément>
    <Enfant>...</Enfant>
  </Sous_Elément>
</Elément_Racine>

<table datasrc="#Identificateur">
  <tr>
    <td>
      <table datasrc="#Identificateur" datafld="Sous_Elément">
        <tr>
          <td>
            <input type="text" datafld="Sous_Elément.Nom_Enfant">
            </input>
          </td>
        </tr>
      </table>
    </td>
  </tr>
</table>
Les Instructions
Instruction
Description
<xml...>...</xml>
intègre un ilôt de données XML dans une page HTML.
datasrc="Source_XML"
insère le contenu du fichier XML pointé.
datafld="Champ_XML"
insère le contenu d'un élément XML.
id="Identificateur"
identifie de façon unique l'ilôt de données XML.
Exemple [voir]
<html>
  <head>
    <title>Démonstration des ilôts de données</title>
  </head>
  <body>
    <XML id="ilot_logitheque">
      <logiciels>
        <categorie nom="XML et XSL">
          <logiciel code="">
            <nom>Cooktop  2.200</nom>
            <commentaire>
              Un éditeur XML, XSLT, XPath et DTD puissant et totalement gratuit.
            </commentaire>
            <editeur
                lien="http://xmleverywhere.com/cooktop/">
              XML Everywhere
            </editeur>
            <langue>EN</langue>
            <plateforme>Win</plateforme>
            <prix monnaie="$US">00.00</prix>
          </logiciel>
          <logiciel code="">
            <nom>XML Spy 3.5</nom>
            <commentaire>
              La version 4 bientôt disponible.
            </commentaire>
            <editeur
                lien="http://www.xmlspy.com/default.html">
              Altova Inc.
            </editeur>
            <langue>EN</langue>
            <plateforme>Win</plateforme>
            <prix monnaie="$US">199,00</prix>
          </logiciel>
          <logiciel code="">
            <nom>XMLwriter v1.21</nom>
            <commentaire>
              Permet de créer des documents XML.
            </commentaire>
            <editeur
                lien="http://xmlwriter.net/">
              Wattle Software
            </editeur>
            <langue>EN</langue>
            <plateforme>Win</plateforme>
            <prix monnaie="$US">75,00</prix>
          </logiciel>
          <logiciel code="">
            <nom>XML Procedure Editor 1.0</nom>
            <commentaire>
              Permet d'établir et de gérer vos procédures sous 
              la forme de documents XML.
            </commentaire>
            <editeur
                lien="http://www.freva.com/XMLPEFR/">
              Freva
            </editeur>
            <langue>FR</langue>
            <plateforme>Win</plateforme>
            <prix monnaie="Euro">129,00</prix>
          </logiciel>
          <logiciel code="">
            <nom>XMetaL 2.1</nom>
            <commentaire>
              Logiciel puissant et flexible pour la création de documents XML.
            </commentaire>
            <editeur
                lien="http://www.softquad.com/top_frame.sq">
              SoftQuad, Inc.
            </editeur>
            <langue>EN</langue>
            <plateforme>Win</plateforme>
            <prix monnaie="$US">495,00</prix>
          </logiciel>
          <logiciel code="">
            <nom>Turbo XML v2.2</nom>
            <commentaire>
              Solution professionnelle de développement de documents XML.
            </commentaire>
            <editeur
                lien="http://216.122.205.184/solutions/turbo_xml/">
              Extensibility, Inc
            </editeur>
            <langue>EN</langue>
            <plateforme>Win/Linux/ Unix/Mac</plateforme>
            <prix monnaie="$US">269,95</prix>
          </logiciel>
          <logiciel code="">
            <nom>XML Directive</nom>
            <commentaire>
              Permet de diriger et d'organiser la gestion du cycle de vie 
              d'actifs XML partout dans l'entreprise.
            </commentaire>
            <editeur
                lien="http://216.122.205.184/solutions/xml_directive/">
              Extensibility, Inc
            </editeur>
            <langue>EN</langue>
            <plateforme>Win/Linux/Unix</plateforme>
            <prix monnaie="$US">9 600,00</prix>
          </logiciel>
          <logiciel code="">
            <nom>UpCast v2.2.0 Single</nom>
            <commentaire>
              Permet de convertir des documents RTF en documents XML.
            </commentaire>
            <editeur
                lien="http://www.infinity-loop.de/en/prod_ucSingleOV.html">
              Infinity-loop
            </editeur>
            <langue>EN</langue>
            <plateforme>Win/Linux/ Unix/Mac</plateforme>
            <prix monnaie="$US">99,00</prix>
          </logiciel>
          <logiciel code="">
            <nom>XSLies 0.56</nom>
            <commentaire>
              Permet de créer des diaporamas sur le Web à partir 
              du langage XSL ou XSLT.
            </commentaire>
            <editeur
                lien="http://lempinen.net/sami/xslies/index.html">
              Sami Lempinen
            </editeur>
            <langue>EN</langue>
            <plateforme>Linux</plateforme>
            <prix monnaie="$US">00,00</prix>
          </logiciel>
          <logiciel code="">
            <nom>DB/XML Vision 1.3</nom>
            <commentaire>
              Outil universel qui offre la puissance de la technologie 
              de Query-in-and-structured-XML-out.
            </commentaire>
            <editeur
                lien="http://www.datamirror.com/products/dbxmlvision/default.asp">
              DataMirror Corp.
            </editeur>
            <langue>EN</langue>
            <plateforme>Win/Linux</plateforme>
            <prix monnaie="$US">00,00</prix>
          </logiciel>
          <logiciel code="">
            <nom>DB/XML Transform 2.0</nom>
            <commentaire>
              Fournit un moteur puissant pour la transformation 
              de données bidirectionnelles entre XML, la base de 
              données et des formats de texte.
            </commentaire>
            <editeur
                lien="http://www.datamirror.com/products/
                             dbxmltransform/default.asp">
              DataMirror Corp.
            </editeur>
            <langue>EN</langue>
            <plateforme>Win/Linux</plateforme>
            <prix monnaie="$US">00,00</prix>
          </logiciel>
          <logiciel code="">
            <nom>xPower Transform 1.0</nom>
            <commentaire>
              Fournit un moteur pour la configuration d'objet et 
              la transformation de données et la conversion.
            </commentaire>
            <editeur
                lien="http://www.bdisystems.com/xtrans.html">
              BDI Systems
            </editeur>
            <langue>EN</langue>
            <plateforme>Win/Linux</plateforme>
            <prix monnaie="$US">00,00</prix>
          </logiciel>
          <logiciel code="">
            <nom>ScriptMaker 1.6</nom>
            <commentaire>
              Un outil pour écrire des scénarios à partir 
              de documents XML.
            </commentaire>
            <editeur
                lien="http://web.ukonline.co.uk/ianto/">
              Ian Pegler
            </editeur>
            <langue>EN</langue>
            <plateforme>Win</plateforme>
            <prix monnaie="$US">00,00</prix>
          </logiciel>
          <logiciel code="">
            <nom>Xalan 1.1</nom>
            <commentaire>
              Un processeur XSL exécutant les recommandations du W3C 
              en ce qui concerne XSLT et XPath.
            </commentaire>
            <editeur
                lien="http://xml.apache.org/xalan-c/index.html">
              Apache Soft. Found.
            </editeur>
            <langue>EN</langue>
            <plateforme>Win/Linux/unix</plateforme>
            <prix monnaie="$US">00,00</prix>
          </logiciel>
          <logiciel code="">
            <nom>Xerces 1.5.0</nom>
            <commentaire>
              Un analyseur syntaxique XML suivant les recommandations 
              et les standars du W3C (DOM 1.0, DOM 2.0. SAXO 1.0,
              SAXO 2.0, Namespaces).
            </commentaire>
            <editeur
                lien="http://xml.apache.org/xerces-c/index.html">
              Apache Soft. Found.
            </editeur>
            <langue>EN</langue>
            <plateforme>Win/Linux/Unix</plateforme>
            <prix monnaie="$US">00,00</prix>
          </logiciel>
          <logiciel code="">
            <nom>Sabblotron 0.60</nom>
            <commentaire>
              Un processeur XSL rapide est compact supportant 
              les recommandations du W3C.
            </commentaire>
            <editeur
                lien="http://www.gingerall.com/charlie-bin/
                             get/webGA/act/sablotron.act">
              Ginger Alliance
            </editeur>
            <langue>EN</langue>
            <plateforme>Win/Linux/Unix</plateforme>
            <prix monnaie="$US">00,00</prix>
          </logiciel>
          <logiciel code="">
            <nom>iXSLT Developer's Edition</nom>
            <commentaire>
              Un processeur XSLT conforme aux recommandations du W3C 
              permettant de transformer des données XML.
            </commentaire>
            <editeur
                lien="http://www.infoteria.com/products/
                             product_page.jsp?id=/product/product_1.xml">
              Infoteria
            </editeur>
            <langue>EN</langue>
            <plateforme>Win/Unix</plateforme>
            <prix monnaie="$US">150,00</prix>
          </logiciel>
          <logiciel code="">
            <nom>iXSLT 10 Users Licences</nom>
            <commentaire>
              Un processeur XSLT conforme aux recommandations du W3C 
              permettant de transformer des données XML.
            </commentaire>
            <editeur
                lien="http://www.infoteria.com/products/
                             product_page.jsp?id=/product/product_1.xml">
              Infoteria
            </editeur>
            <langue>EN</langue>
            <plateforme>Win/Unix</plateforme>
            <prix monnaie="$US">600,00</prix>
          </logiciel>
          <logiciel code="">
            <nom>Lotus XSL 2.0</nom>
            <commentaire>
              Un processeur XSLT conforme aux recommandations du W3C 
              permettant de transformer des données XML.
            </commentaire>
            <editeur
                lien="http://www.alphaworks.ibm.com/formula/LotusXSL">
              IBM
            </editeur>
            <langue>EN</langue>
            <plateforme>Win/Linux/ Unix/Mac</plateforme>
            <prix monnaie="$US">00,00</prix>
          </logiciel>
          <logiciel code="">
            <nom>XT Version 19991105</nom>
            <commentaire>
              Un processeur XSL écrit entièrement en Java.
            </commentaire>
            <editeur
                lien="http://www.jclark.com/xml/xt.html">
              James Clark
            </editeur>
            <langue>EN</langue>
            <plateforme>Win/Linux/ Unix/Mac</plateforme>
            <prix monnaie="$US">00,00</prix>
          </logiciel>
          <logiciel code="">
            <nom>XML::XSLT v0.30</nom>
            <commentaire>
              Un processeur XSL écrit entièrement en Perl.
            </commentaire>
            <editeur
                lien="http://xmlxslt.sourceforge.net/">
              Geert Josten
            </editeur>
            <langue>EN</langue>
            <plateforme>Win/Linux/Unix</plateforme>
            <prix monnaie="$US">00,00</prix>
          </logiciel>
        </categorie>
        <categorie nom="Base de données">
          <logiciel code="13414439">
            <nom>Borland Kylix Developpement Serveur</nom>
            <commentaire>
              Accélérez vos developpement Web sous Linux !
            </commentaire>
            <editeur
                lien="http://www.borland.com/">
              Borland
            </editeur>
            <langue>US</langue>
            <plateforme>Win/Linux</plateforme>
            <prix monnaie="FRF">14 269,00</prix>
          </logiciel>
          <logiciel code="11406670">
            <nom>ColdFusion Studio 4.5</nom>
            <commentaire>
              + 2 ans maintenance Maintenance de 2 ans pour COLD FUSION.
            </commentaire>
            <editeur
                lien="http://www.allaire.com/products/">
              Allaire
            </editeur>
            <langue>US</langue>
            <plateforme>Win</plateforme>
            <prix monnaie="FRF">5 700,00</prix>
          </logiciel>
          <logiciel code="09604363">
            <nom>FileMaker Server 5.0</nom>
            <commentaire>
              Pour une gestion de base de données facile.
            </commentaire>
            <editeur
                lien="http://www.filemaker.fr/products/index.html">
              File Maker Int.
            </editeur>
            <langue>FR</langue>
            <plateforme>Win/Mac</plateforme>
            <prix monnaie="FRF">8 370,80</prix>
          </logiciel>
          <logiciel code="13400960">
            <nom>Site Server 3.0, 5 licences</nom>
            <commentaire>
              Ajout de 5 licences pour Site Server 3.0.
            </commentaire>
            <editeur
                lien="http://www.microsoft.com/france/msdn/
                             technologies/SiteServer/default.asp">
              Microsoft
            </editeur>
            <langue>FR</langue>
            <plateforme>Win</plateforme>
            <prix monnaie="FRF">2 264,40</prix>
          </logiciel>
          <logiciel code="13400954">
            <nom>Site Server Commerce Edition 3.0</nom>
            <commentaire>
              Pour démarcher les clients en ligne.
            </commentaire>
            <editeur
            lien="http://www.microsoft.com/france/msdn/
                         technologies/SiteServer/default.asp">
              Microsoft
            </editeur>
            <langue>FR</langue>
            <plateforme>Win</plateforme>
            <prix monnaie="FRF">46 235,58</prix>
          </logiciel>
          <logiciel code="13401031">
            <nom>Visual InterDev 6.0 Professionnel</nom>
            <commentaire>
              Développez vos applications web professionnelles.
            </commentaire>
            <editeur
                lien="http://www.microsoft.com/france/vinterdev/default.asp">
              Microsoft
            </editeur>
            <langue>FR</langue>
            <plateforme>Win</plateforme>
            <prix monnaie="FRF">3 854,81</prix>
          </logiciel>
        </categorie>
      </logiciels>
    </XML>
    <table id="logitheque" datasrc="#ilot_logitheque" border="1">
      <tr>
        <th colspan="3"><div datafld="nom"></div></th>
      </tr>
      <tr>
        <th width="60%">Nom</th>
        <th width="10%">Langue</th>
        <th width="30%">Plateforme</th>
      </tr>
      <tr>
        <td colspan="3">
          <table datasrc="#ilot_logitheque" datafld="logiciel" 
                       border="1" width="100%">
            <tr>
              <th width="60%">
                <div datafld="nom"></div>
              </th>
              <td width="10%">
                <div datafld="langue"></div>
              </td>
              <td width="30%">
                <div datafld="plateforme"></div>
              </td>
            </tr>
            <tr>
              <td colspan="3">
                <table datasrc="#ilot_logitheque" datafld="editeur" 
                             border="1" rules="rows">
                  <tr>
                    <td><b>Lien : </b></td>
                    <td><div datafld="lien"></div></td>
                  </tr>
                </table>
                <div datafld="commentaire"></div>
              </td>
            </tr>
          </table>
        </td>
      </tr>
    </table>
  </body>
</html>

7.1 / L'objet Data Islands XML

L'ilôt de données inséré dans un document HTML est représenté par un objet spécifique possédant ses propres propriétés, méthodes et événements.

<XML id="Identificateur_Ilot">...</XML>
<script language="Javascript">
  Objet_XML = Identificateur_Ilot

  Objet_XML.Propriété | Méthode | Evénement
</script>

L'objet DHTML Document contient une méthode XMLDocument permettant de retourner un ilôt de données contenu dans le document HTML.

Objet_XML = document.XMLDocument;

A partir de la palette d'outils dédiée à l'objet Data Islands XML, il est possible de manipuler l'arborescence de l'ilôt de données XML.

Les éléments du DOM (Document Object Model) sont, pour la plupart, utilisables sur l'objet d'ilôt de données XML.

Les Propriétés
Propriété
Description
Objet_XML.Objet_XML.canHaveHTML = True | False
fixe ou récupère la valeur indiquant si l'objet peut contenir un balisage HTML.
Chaîne_de_caractères = Objet_XML.id
récupère la chaîne de caractères identifiant (ID) l'objet.
True | False = Objet_XML.isContentEditable
récupère la valeur indiquant si l'utilisateur édite le contenu de l'objet.
True | False = Objet_XML.isDisabled
récupère la valeur indiquant si l'utilisateur peut interagir sur l'objet.
True | False = Objet_XML.isMultiLine
récupère la valeur indiquant si le contenu de l'objet contient une ou plusieurs lignes.
Set Objet_Element = Objet_XML.parentElement
récupère l'objet parent dans l'arborescence de l'objet XML.
enumReadyState = Objet_XML.readyState
récupère l'état courant de l'objet.
Objet_XML.recordset = Objet_Recordset
fixe ou retourne à partir d'un objet source de données une référence vers le jeu d'enregistrements par défaut.
Nom = Objet_XML.scopeName
retourne l'espace de noms défini pour l'élément.
Objet_XML.src = Adresse
fixe ou retourne une adresse URL permettant de charger l'objet.
Objet_XML.tagUrn = URN
fixe ou retourne l'URN (Uniform Resource Name) spécifié dans la déclaration d'espace de noms.
Set Objet_DOMDocument = Objet_XML.XMLDocument
retourne une référence vers le DOM XML (XML Document Object Model) affichée par l'objet.
Les Méthodes
Méthode
Description
Identifiant = Objet_XML.addBehavior(Adresse_URL)
attribue un comportement à l'élément.
Composant = Objet_XML.componentFromPoint(Coord_X, Coord_Y)
retourne le composant localisé aux coordonnées spécifiées via certains événements.
True | False = Objet_XML.fireEvent(Evénement[, Objet_Evénement])
lance un événement spécifié sur l'objet.
Set Objet_Attribut = Objet_XML.getAttributeNode(Nom)
retourne un objet attribut référencé par la propriété attribute.name.
Set Objet_Recordset = Objet_XML.namedRecordset(Nom[, Chemin])
retourne l'objet recordset correspondant au membre de données nommé à partir d'un objet source de données (DSO).
Objet_XML.normalize()
fusionne les objets TextNodepour produire un modèle d'objet de document normalisé.
Information = Objet_XML.parseError.Propriété
retourne par l'intermédiaire de ses propriétés les information à propos de l'erreur en cours.
Ref_Objet_Attribut = Objet_XML.removeAttributeNode(Objet_Attribut)
enlève un objet attribute à partir de l'objet.
True | False = Objet_XML.removeBehavior(ID)
sépare un comportement de l'élément.
Ref_Objet_Attribut = Objet_XML.setAttributeNode(Objet_Attribut)
fixe un objet attribute comme une partie de l'objet.
Les Evénements
Evénement
Description
ondataavailable
est lancé périodiquement lorsque les données arrivent à partir des sources de données qui transmettent d'une façon asynchrone leurs données.
ondatasetchanged
est lancé lorsqe le jeu de données exposé par un objet source de données change.
ondatasetcomplete
est lancé pour indiquer que toutes les données sont disponibles à partir de l'objet source de données.
onreadystatechange
est lancé lorsque l'état de l'objet a changé.
onrowenter
est lancé pour indiquer que la ligne courante a été modifiée dans la source de onnées et les nouvelles valeurs de données sont disponibles sur l'objet.
onrowexit
est lancé juste avant le contrôle de source de données modifie la ligne courante dans l'objet.
onrowsdelete
est lancé lorsque les lignes ont été supprimées du jeu d'enregistrements.
onrowsinserted
est lancé juste après que de nouvelles lignes soient insérées dans le jeu d'enregistrements courant.

Les événements sont utilisable de diverses manières.

<ELEMENT Evénement="Gestionnaire" ... >
Utilisable sur toutes les plateformes.

Objet_XML.Evénement="Gestionnaire"
Utilisable en JScript et Javascript.

Objet.Evénement = GetRef("Gestionnaire")
utilisable sous VBScript.

<script for="objet" event="Evénemement">...</script>
Utilisable uniquement sur Internet Explorer.
Exemple [voir]
<html>
  <head>
    <title>Affichage des caractéristiques d'une arborescence XML</title>
  </head>
  <body>
    <XML id="Donnee_XML" src="logitheque.xml"></XML>
    <a href="javascript:Analyse()">Lancer l'analyse du document</a>
    <SPAN id="Affichage"></SPAN>
    <script language="Javascript" type="text/javascript">
      var Tab_TypeNoeud = new Array('ELEMENT', 'ATTRIBUT', 'TEXTE',
                              'CDATA SECTION', 'ENTITY REFERENCE', 'ENTITY',
                              'PROCESSING INSTRUCTION', 'COMMENT', 'DOCUMENT',
                              'DOCUMENT TYPE', 'DOCUMENT FRAGMENT', 'NOTATION');
      function Analyse()
      {
        var tab1 = '<table border="1" cellpadding="3"'
              + 'cellspacing="3" width="60%">'
              + '<tr><th width="10%">Niveau</th>'
              + '<th width="45%">Nom du Noeud</th>'
              + '<th width="45%">Type du Noeud</th></tr><tr>'
              + '<th colspan="3">Valeur du Noeud</th></tr>';
        var tab2 = '</table>';
        var Info;
        var Fichier_XML = Donnee_XML;
        if (Fichier_XML.parseError.errorCode != 0)
        {
          Info = '<h3>Le fichier XML est invalide.</h3>';
          Info += '<table><tr><td><b>Code d'erreur</b></td><td><b>: </b>'
                    + Fichier_XML.parseError.errorCode + '</td></tr>';
          Info += '<tr><td><b>Description</b></td><td><b>: </b>' 
                    + Fichier_XML.parseError.reason + '</td></tr>';
          Info += '<tr><td><b>Fichier</b></td><td><b>: </b>'
                    + Fichier_XML.parseError.filepos + '</td></tr>';
          Info += '<tr><td><b>Adresse du fichier</b></td><td><b>: </b>'
                    + Fichier_XML.parseError.url + '</td></tr>';
          Info += '<tr><td><b>Ligne responsable</b></td><td><b>: </b>'
                    + Fichier_XML.parseError.srcText + '</td></tr>';
          Info += '<tr><td><b>Numéro de Ligne</b></td><td><b>: </b>'
                    + Fichier_XML.parseError.line + '</td></tr>';
          Info += '<tr><td><b>Numéro de Colonne</b></td><td><b>: </b>'
                    + Fichier_XML.parseError.linepos + '</td></tr></table>';
          document.write(Info);
          return;
        }
        Affichage.innerHTML = tab1 + AffichageNoeudEnfant(Fichier_XML, 0) + tab2;
      }

      function AffichageNoeudEnfant(Noeud, Niveau)
      {
        var Resultat = '';
        var Longueur = 0;
        var Num_Noeud = 0;
        var Liste_Attribut;
        var Num_Attribut;
        Resultat += '<tr><th>' + Niveau + '</th><td>' + Noeud.nodeName
               + '</td><td>' + Tab_TypeNoeud[Noeud.nodeType - 1] + '</td></tr>'
               + '<tr><td colspan="3">' + Noeud.nodeValue + '</td></tr>';
        Liste_Attribut = Noeud.attributes;
        if (Liste_Attribut != null)
        {
          Longueur = Liste_Attribut.length;
          if (Longueur > 0)
          {
            for (Num_Attribut = 0; Num_Attribut < Longueur; Num_Attribut++)
              Resultat += '<tr><th>' + Niveau + '</th>'
                     + '<td>' + Liste_Attribut(Num_Attribut).nodeName + '</td><td>'
                     + Tab_TypeNoeud[Liste_Attribut(Num_Attribut).nodeType - 1]
                     + '</td></tr><tr><td colspan="3">' 
                     + Liste_Attribut(Num_Attribut).nodeValue + '</td></tr>';
          }
        }
        Longueur = Noeud.childNodes.length;
        if (Longueur > 0)
          for (Num_Noeud = 0; Num_Noeud < Longueur; Num_Noeud++)
            Resultat += 
              AffichageNoeudEnfant(Noeud.childNodes(Num_Noeud), Niveau + 1);
        return Resultat;
      }
    </script>
  </body>
</html>

7.2 / Manipulation des données

Les ilôts de données peuvent être manipulés à l'aide des éléments, propriétés et méthodes du modèle d'objet de document XML, voire même d'instructions ADO (ActiveX Data Objects).

Objet.Propriété | méthode

La propriété childNodes appliquée à l'objet Data Islands XML ou à l'un de ses noeuds éléments, retourne soit une liste de noeuds enfants, soit si un index est spécifié un noeud.

Collection_Noeuds = Objet.childNodes

Objet_Noeud = Objet.childNodes(Index)

La propriété attributes dans les mêmes conditions que celles précitées, retourne soit une liste d'attributs, soit un noeud attribut.

Collection_Atributs = Objet.attributes

Objet_Attribut = Objet.attributes(Index)

De même, les valeurs des différents noeuds composant l'arborescence de l'ilôt de donnés XML, sont toutes extractibles par l'intermédiaire de propriétés ou méthodes appropriées.

Valeur = Objet.nodeValue

Le type d'un noeud est déterminé par l'intermédiaire de la propriété nodeType.

Type = Objet.nodeType

Le parcours dans l'arborescence de l'ilôt de données XML s'accomplit par l'utilisation des méthodes de déplacement movePrevious, moveNext, moveFirst, moveLast, etc. du langage ADO (ActiveX Data Objects).

Objet.recordset.Méthode_Déplacement

Le modèle d'objet propose également des solutions de parcours dans les éléments XML.

Objet_XML.nodeFromID(Chaîne_ID)

Objet_Noeud = Objet_Node.parentNode

Objet_Noeud = Objet_Node.firstChild

Objet_Noeud = Objet_Node.lastChild

Objet_Noeud = Objet_Node.nextSibling

Objet_Noeud = Objet_Node.previousSibling

Objet_Noeud = Collection_Noeuds.item(Index)

Objet_Noeud = Collection_Noeuds.nextNode()
Exemple [voir]
<html>
  <head>
    <title>Parcours dans un jeu d'enregistrements</title>
  </head>
  <body>
    <XML id="logitheque" src="logitheque.xml"></XML>
    <table>
      <tr>
        <td>
          <input type="submit" value=" << "
                   onclick="logitheque.recordset.MoveFirst()">
          </input>
          <input type="submit" value=" < " 
                   onclick="if (!logitheque.recordset.BOF)
                            logitheque.recordset.MovePrevious()">
          </input>
          <input id="Code" type="text" size="20"
                     datasrc="#logitheque" datafld="nom">
          </input>
          <input type="submit" value=" > "
                   onclick="if (!logitheque.recordset.EOF)
                            logitheque.recordset.MoveNext()">
          </input>
          <input type="submit" value=" >> "
                   onclick="logitheque.recordset.MoveLast()">
          </input>
        </td>
      </tr>
    </table>
    <table datasrc="#logitheque" datafld="logiciel"
               border="1" frame="box" rules="rows">
      <tr>
        <td>
          <b>
            <div id="Title" datasrc="#logitheque" datafld="nom"></div>
          </b>
        </td>
        <td>
          <div id="Title" datasrc="#logitheque" datafld="langue"></div>
        </td>
      </tr>
      <tr>
        <td colspan="2">
          <div id="Title" datasrc="#logitheque" datafld="commentaire"></div>
        </td>
      </tr>
    </table>
    <table>
      <tr>
        <td>
          <input type="submit" value=" << "
                   onclick="logitheque.recordset.MoveFirst()">
          </input>
          <input type="submit" value=" < " 
                   onclick="if (!logitheque.recordset.BOF)
                            logitheque.recordset.MovePrevious()">
          </input>
          <input id="Code" type="text" size="20"
                     datasrc="#logitheque" datafld="nom">
          </input>
          <input type="submit" value=" > "
                   onclick="if (!logitheque.recordset.EOF)
                            logitheque.recordset.MoveNext()">
          </input>
          <input type="submit" value=" >> "
                   onclick="logitheque.recordset.MoveLast()">
          </input>
        </td>
      </tr>
    </table>
  </body>
</html>

8 / Les fichiers à plat

Les fichiers à plat sont des fichiers textuels possédant une structure ordonnée à l'image notamment, des fichiers de configurations (ini) ou des fichiers statistiques (log).

Les données contenues dans ce genre de fichiers peuvent être facilement extraites du fait de leur parfaite organisation.

212.30.116.74 GET /coursasp/formulaire.html HTTP/1.1 200 11085
216.206.88.135 GET /coursvbscript/sommaire.html HTTP/1.0 200 11660
...

Chaque champ dans cet exemple, est délimité par un espace blanc et chaque ligne par un saut de ligne (chr(10)) et un retour chariot (chr(13)). Le caractère de délimitation pourrait être n'importe quel caractère comme une virgule (,) ou un point-virgule (;).

Il est possible de rencontrer d'autres types de fichiers à plat comme ceux à largeur fixe ou à enregistrements balisés.

Les fichiers à largeur fixe diffère dans la mesure où chaque champ possède un nombre d'octets déterminé.

212.30.116.74  GET  /coursasp/formulaire.html    HTTP/1.1 200 11085
...
' 15 octets 4 octets 50 octets 8 octets 3 octets 6 octets chr(10) chr(13)
...

Les fichiers à enregistrements balisés contiennent un balisage spécifique représentant un type d'information pour chacune des lignes.

H 212.30.116.74 GET /coursasp/formulaire.html HTTP/1.1 200 11085
J 212.30.116.74 GET /javascript/initialisation.js HTTP/1.1" 200 9065
J 212.30.116.74 GET /coursasp/javascript/navigation.js HTTP/1.1 200 2517
S 212.30.116.74 GET /style/sommaire.css HTTP/1.1 200 1332
...
' P représente une page HTML,
' J représente un script externe,
' S représente une feuille de style.

Avant d'écrire un programme permettant d'extraire les informations précisément, il est impératif d'analyser attentivement la structure du fichier à plat afin de définir non seulement son type mais aussi les délimiteurs, les champs et les lignes.

65.116.145.133 - - "GET,/coursjavascript/style.html,HTTP/1.1" 200 16169
212.30.116.74 - - "GET,/javascript/initialisation.js,HTTP/1.1" 200 9065
...

Dans ce cas, les délimiteurs ne sont pas identiques pour tous les champs bien qu'il s'agisse d'un fichier à plat délimité.

Subséquemment à l'étude du fichier, il est nécessaire d'établir un dictionnaire des données comportant l'emplacement du champ dans la ligne, son nom, son type de données, ses valeurs possibles et éventuellement une description.

Num (délimiteur) Nom
Type Valeurs
Description
1 ( - - ") adresse_ip
chaîne ###.###.###.###
Adresse IP du client comportant 9 chiffres et trois points.
2 (,) methode
chaîne POST | GET
Méthodes d'accès au serveur.
3 (,) document
chaîne [/répertoire][...]/document.extension
Adresse locale du document.
4 (" ) protocole
chaîne HTTP/1.1
Protocole d'accès HTTP.
5 ( ) code
numérique ###
Code d'accès HTTP à trois chiffres.
6 (saut de ligne) poids
numérique ######
Poids du document en octets.

Ensuite, il faut penser à étudier la structure d'accueil pour les informations extraites du fichier à plat.

Pour un fichier XML, l'élément racine, les éléments parents et enfants ainsi que les attributs doivent être déterminés de sorte à convenir le plus judcieusement possible aux contraintes d'une application.

<statistique>
  <client adresse_ip="valeur">
    <document poids="valeur"
                   protocole="valeur"
                   code="valeur"
                   methode="valeur">
      valeur
    </document>
    <document poids="valeur"
                   protocole="valeur"
                   code="valeur"
                   methode="valeur">
      valeur
    </document>
    ...
  </client>
  ...
</statistique>

Il ne reste désormais plus qu'à entreprendre l'élaboration d'un programme permettant de sérialiser automatiquement un fichier à plat en fichier XML.

Exemple [voir]
<%
  Const OpenFileForReading = 1

  Dim obj_fso, obj_dom, obj_log, racine, noeud
  Dim obj_client, obj_document, obj_protocole, obj_code, obj_methode
  Dim adresse_ip, methode, document, protocole, code, poids
  Dim tableau, elt_adresse, i, trouve
  i = 1

  Set obj_fso = Server.CreateObject("Scripting.FileSystemObject")
  fichier = Server.MapPath("fichier_log.txt")
  Set obj_log = obj_fso.OpenTextFile(fichier, OpenFileForReading)

  Set obj_dom = Server.CreateObject("MSXML2.DOMDocument")
  Set racine = obj_dom.createElement("statistique")
  obj_dom.appendChild racine

  Do While Not obj_log.AtEndOfStream
    trouve = false
    ligne = obj_log.ReadLine
    tableau = Split(ligne, " ", -1, 1)
    elt_adresse = Split(tableau(3), ",", -1, 1)

    adresse_ip = tableau(0)
    methode = Right(elt_adresse(0), Len(elt_adresse(0)) - 1)
    document = elt_adresse(1)
    protocole = Left(elt_adresse(2), Len(elt_adresse(2)) - 1)
    code = tableau(4)
    poids = tableau(5)

    Set obj_client = obj_dom.createElement("client")
    obj_client.setAttribute "adresse_ip", adresse_ip

    Set obj_document = obj_dom.createElement("document")
    Set document_txt = obj_dom.createTextNode(document)
    obj_document.setAttribute "poids", poids
    obj_document.setAttribute "protocole", protocole
    obj_document.setAttribute "code", code
    obj_document.setAttribute "methode", methode

    obj_document.appendChild document_txt

    Response.Write "<br><b>Ligne n°" & i & "</b><br>---------<br>" & adresse_ip _
                 & "<br>" & methode & "<br>" & document & "<br>" _
                 & protocole & "<br>" & code & "<br>" & poids & "<br><br>"

    If racine.hasChildNodes Then
      For Each noeud In racine.childNodes
        If noeud.attributes.item(0).value = adresse_ip Then
          Response.Write i & " " & noeud.nodeName & " : " _
                           & noeud.attributes.item(0).value _
                           & " = " & adresse_ip & "<br>"

          noeud.appendChild obj_document

          trouve = true
        End If
        i = i + 1
      Next
    End If

    If trouve = false OR (racine.hasChildNodes AND trouve = false) Then
      obj_client.appendChild obj_document

      racine.appendChild obj_client
    End If

    i = i + 1
  Loop

  obj_dom.save(Server.MapPath("fichier_log.xml"))

  Response.Write "Le fichier de statistique au format texte" _
                 & " est disponible à l'adresse suivante :<br>" _
                 & Server.MapPath("fichier_log.xml")

  obj_log.close
  Set obj_log = Nothing
%>

8.1 / Les fichiers à plat (2)

Les fichiers à plat peuvent également être générés à partir d'une source XML.

Dans ce cas de sérialisation, il suffit de décomposer la structure XML selon le type de fichier à plat souhaîté.

Il est possible d'utiliser aussi bien le modèle d'objet de document XML qu'une feuille de style de transformation XSLT. Bien que cette dernière semble parfaitement convenir pour ce genre de processus, nous nous attacherons à développer un programme basé sur le DOM XML.

A l'instar de la transformation d'un fichier à plat vers un fichier XML, une étude méticuleuse de la source XML et du résultat textuel envisagé est nécessaire afin de déterminer le type de fichier à plat, les lignes, les champs et les délimiteurs.

Fichier source XML
<statistique>
  <client adresse_ip="valeur">
    <document poids="valeur">valeur</document>
    <protocole>valeur</protocole>
    <code>valeur</code>
    <methode>valeur</methode>
  </client>
  ...
</statistique>

Modèle de fichier à plat
65.116.145.133 /courscss/style.html 16169 HTTP/1.1 200 GET
adresse_ip document poids protocole code methode
Exemple [voir]
<%
  Dim obj_dom
  Dim fichier, ligne, champ, texte, delimiteur
  Dim racine, noeud, enfant, attribut, attributs

  Set obj_dom = Server.CreateObject("MSXML2.DOMDocument")
  obj_dom.async = False
  fichier = Server.MapPath("fichier_log.xml")
  obj_dom.load(fichier)
  Set racine = obj_dom.documentElement

  delimiteur = " "

  For Each noeud In racine.childNodes
    Set attributs = noeud.attributes
    Set attribut = attributs.item(0)
    champ = champ & attribut.value & delimiteur

    For Each enfant In noeud.childNodes
      champ = champ & enfant.text & delimiteur

      Set attributs = Nothing
      Set attributs = enfant.attributes
      If attributs.length > 0 Then
        Set attribut = attributs.item(0)
        champ = champ & attribut.value & delimiteur
      End If
    Next

    ligne = ligne & champ & chr(10) & chr(13)
  Next

  Response.write "<b>Le contenu du fichier log :" _
                 & "</b><br>" & ligne

  Set obj_fso = Server.CreateObject("Scripting.FileSystemObject")
  set texte = obj_fso.CreateTextFile("c:\fichier_stat.txt", True)
  texte.Write ligne

  texte.close
  Set texte = Nothing
  Set fichier = Nothing
%>

9 / Manipulation des données XML avec ASP

Le langage XML est en passe de devenir un support de stockage de données indispensable pour la mise en oeuvre d'un site Web dynamique. Le langage ASP intègre déjà de nombreux outils permettant de travailler en conjonction avec des documents XML.

Un document XML possède des informations parfaitement ordonnées exploitables par une application ASP.

<?xml version="1.0"?>
<!DOCTYPE racine SYSTEM "http://adresse.web.com/dtD">
<racine>
  <element attribut="Valeur"/>
  <element_2>Contenu_Textuel</element_2>
  <[CDATA[Texte]]>
</racine>

Il est possible de manipuler tous les composants d'une arborescence XML, c'est-à-dire, de parcourir les différents noeuds, d'extraire les informations contenues dans ces derniers, d'en insérer de nouveaux, de mettre à jour leur contenu ou encore d'en supprimer.

9.1 / Le chargement et la sauvegarde d'un document XML

Le chargement d'un document XML dans une page ASP à partir du modèle d'objet de document s'accomplit en créant tout d'abord une instance de l'objet DOM puis en utilisant la méthode de chargement load.

Dim Objet_Document
Set Objet_Document = _
                    Server.CreateObject("MSXML2.DOMDocument")
Objet_Document.load("Disque:\Chemin\Fichier.xml")

Le ProgID fournit en argument dans la méthode createObject fait appel par défaut à la version 3.0 du parseur MSXML. L'ajout d'un numéro de version à la fin de la chaîne de caractères permet d'appeler explicitement la version de MSXML désirée.

'Sollicitation de msxml4.dll (c:\winnt\system32\)
Set Objet_Document = _
                    Server.CreateObject("MSXML2.DOMDocument.4.0")

'Sollicitation de msxml3.dll (c:\winnt\system32\)
Set Objet_Document = _
                    Server.CreateObject("MSXML2.DOMDocument.3.0")

Par ailleurs, la méthode load retournant une valeur booléenne en fonction du déroulement du processus, peut être utilisée pour détecter un échec de chargement du fichier XML concerné et ainsi prévoir une procédure adaptée.

if Objet_Document.load("Disque:\Chemin\Fichier.xml") Then
  Response.Write "Le chargement s'est déroulé avec succès."
Else
  Response.Write "Un échec s'est produit lors du chargement."
End If

La méthode MapPath de l'objet ASP Server permet de résoudre un chemin relatif en une adresse physique complète sur le serveur.

fichier = Server.MapPath("../fichier.xml")
Objet_Document.load(fichier)

Par défaut, le chargement du fichier XML s'effectue de manière asynchrone. Cela permet de vérifier l'état de l'instruction de chargement load. La méthode readyState associée à un événement onreadystatechange peut alors retourner une valeur enumReadyState reflétant l'état du processus de chargement d'un fichier XML.

Objet_Document.onreadystatechange = Gestionnaire_Evénement;
Etat = Objet_Document.readyState;

Si aucune fonction de ce genre n'est nécessaire, il est possible de ne pas conserver un chargement asynchrone et partant de fixer la propriété async à la valeur False. Mais dans ce cas, l'analyseur XML ne rend la main que lorsque le document est complétement chargé et analysé et partant disponible pour la suite du programme.

Objet_Document.async = False

Par ailleurs, le fichier est chargé avec une propriété validateOnParse fixée par défaut à True. Elle est utilisée pour l'analyse du document XML par rapport à sa définition de type de document (DTD) ou à son schéma. Si cette fonctionnalité n'est pas obligatoire pour le document à traiter, la valeur False peut être attribuée à la propriété validateOnParse afin d'éviter l'opération de validation.

Objet_Document.validateOnParse = True (Par défaut) | False

La méthode loadXML permet le chargement d'un document XML exprimée sous la forme d'une chaîne de caractères bien formé.

Objet_Document.loadXML_
                  ("<?xml version=""1.0""?><racine>...</racine>")

Suite à la manipulation d'une arborescence XML, il est nécessaire de conserver les modifications apportées au document.

La méthode save permet de sauvegarder un document XML dans un fichier au format adéquat.

Objet_Document.save(Nom_Fichier)

Il est possible d'enregistrer l'objet DOMDocument dans un fichier XML, dans l'objet ASP Response, un autre objet DOMDocument ou dans tout autres objets supportant la persistance.

Objet_Document.save(Response)

A la fin du traîtement de l'objet DOMDocument, la référence doit être libérée dans VBScript par une affectation présentée ci-dessous.

Set Objet_Document = Nothing
Exemple [voir]
<html>
  <head>
    <script language="JScript">
      var Objet_Document, Objet_Erreur;
      function chargement()
      {
        Objet_Document = new ActiveXObject("Msxml2.DOMDocument");
        Objet_Erreur = Objet_Document.parseError;
        Objet_Document.onreadystatechange = affiche_etat;
        Objet_Document.async = false
        Objet_Document.validateOnParse = false
        Objet_Document.load(adresse.value);
        return;
      }

      function affiche_etat()
      {
        var Etat;
        Etat = Objet_Document.readyState;
        if (Etat == 0)
         { affichage.innerHTML += "Le chargement n'a pas commencé"
                                            + " (readyState = " + Etat + ").<br>"; }
        if (Etat == 1)
         { affichage.innerHTML += "Le chargement est en cours"
                                            + " (readyState = " + Etat + ").<br>"; }
        if (Etat == 2)
         { affichage.innerHTML += "Le chargement du fichier est terminé"
                                            + " (readyState = " + Etat + ").<br>"; }
        if (Etat == 3)
         { affichage.innerHTML += "Le fichier est en cours d'analyse"
                                            + " (readyState = " + Etat + ").<br>"; }
        if (Etat == 4)
        {
          if (Objet_Erreur.errorCode == 0)
          {
            affichage.innerHTML += "Le chargement et l'analyse sont terminés"
                                             + " (readyState = " + Etat + ").<br>";
                                             + "<h2>Opération réussie !<h2>"
          }
          else
          {
            affichage.innerHTML += "<h2>Le chargement a échoué.</h2>"
                                            + "<br>Une erreur d'analyse s'est produite."
                                            + "<br>Code : " + Objet_Erreur.code
                                            + "<br>Raison : " + Objet_Erreur.reason
                                            + "<br>Texte : " + Objet_Erreur.srcText
                                            + "<br>URL : " + Objet_Erreur.url
                                            + "<br>Position : " + Objet_Erreur.filePos
                                            + "<br>Ligne : " + Objet_Erreur.line
                                            + "<br>Colonne : " + Objet_Erreur.linePos;
          }
        }
        return;
      }
    </script>
  </head>
  <body>
    Adresse :
    <input type="text" size="80" id="adresse"
                value="http://laltruiste.com/coursdomxml/exemples/logitheque.xml">
    <input type="button" value="Chargement" onclick="jscript:chargement()">
    <hr>
    <div id="resultat" style="font-size:12pt; font-weight:bold; color:blue">
    </div>
  </body>
</html>

9.2 / L'extraction de noeuds XML

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 Objets
Objet 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 Collections
Collection 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.

Set Noeud_Parent = Objet_Noeud.parentNode

Set Objet_Document = Objet_Noeud.ownerDocument
Exemple [voir]
<%
  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
%>

9.3 / Récupération des propriétés d'un objet

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.

For Each Objet_Noeud In Liste_Noeuds
  Dim Tampon
  If Objet_Noeud.nodeType = 7 Then
  Tampon = Tampon & Objet_Noeud.value
  End If
Next
Les types de noeuds
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é.
NODE_PROCESSING_INSTRUCTION
(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.

Nombre_Caractères = Objet_Texte.length
Exemple [voir]
<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>

9.4 / L'insertion de noeuds

Le modèle d'objet de document (DOM) propose des solutions destinées à l'insertion, à la mise à jour ou à la suppression de noeuds dans l'arborescence d'un document XML.

L'objet Document demeure l'interface privilégiée pour les opérations de créations d'objets tels que des éléments, des attributs, des sections CDATA, des instructions de traitement, etc..

Les Méthodes
Méthode
Description
Set Attribut = Objet_Document.createAttribute(Nom)
crée un attribut.
Set SectionCDATA = Objet_Document.createCDATASection(Données)
crée une nouvelle section CDATA
Set Commentaire = Objet_Document.createComment(Données)
crée un nouveau commentaire.
Set Fragment = Objet_Document.createDocumentFragment
crée un fragment de document.
Set Element = Objet_Document.createElement(nom)
crée un noeud élément.
Set RefEntite = Objet_Document.createEntityReference(nom)
crée une référence d'entité.
Set Noeud = Objet_Document.createNode(Type, Nom, URI_Espace_Nom)
crée un noeud selon le type fourni en argument.
Set PI = Objet_Document.createProcessingInstruction(Cible, Données)
crée une instruction de traitement.
Set Texte = Objet_Document.createTextNode(Données)
crée un noeud contenant du texte.

Suite à la création d'un noeud, la méthode appendChild ajoute un nouvel enfant à la fin de sa propre collection de noeuds.

Set Noeud_Ajoute = Objet_Noeud.appendChild(Nouvel_Enfant)

Une autre méthode insertBefore insère le noeud avant l'endroit spécifié par l'argument Référence.

Set Noeud_Insere = _
               Objet_Noeud.insertBefore(Nouvel_Enfant, Référence)

De même, la méthode setAttribute ajoute un attribut avec ses nom et valeur fournis, directement dans un élément.

Objet_Element.setAttribute(Nom, Valeur)

Tandis que, la méthode setAttributeNode ajoute un objet Attribute précédemment créé dans un objet élément.

Set Attribut_Ajoute = _
               Objet_Element.setAttributeNode(Objet_Attribut)

Une dernière méthode setNamedItem ajoute un nouvel attribut dans une collection.

Set Noeud_Ajoute = _
               Collection_Attributs.setNamedItem(Nouveau_Noeud)

L'objet générique Node permet également de remplacer (replaceChild) ou de supprimer (removeChild) n'importe quel noeud enfant.

Objet_Noeud.replaceChild(Nouvel_Enfant, Ancien_Enfant)

Objet_Noeud.removeChild(Noeud_Enfant)

D'autres méthodes de suppression existent dans le DOM. Respectivement, elles enlèvent tous les noeuds (removeAll) ou le prochaîn noeud (removeNext) d'une sélection, un attribut d'un élément (removeAttribute) ou d'une collection (removeAttributeNode, removeNamedItem et removeQualifiedItem) et enfin un espace de noms d'une collection de schéma.

Objet_Selection.removeAll

Set Noeud_Supprime = Objet_Selection.removeNext

Objet_Element.removeAttribute(Nom)

Set Attribut_Supprime = _
                  Objet_Element.removeAttributeNode(Objet_Attribut)

Set Attribut_Supprime = _
                  Collection_Attributs.removeNamedItem(Nom)

Set Attribut_Supprime = _
                  Collection_Attributs.removeQualifiedItem _
                                (Nom_Base, URI_Espace_de_Noms)

Collection_Schema.remove(URI_Espace_de_Noms)

La méthode appendData appliquée à des noeuds textuels comme un commentaire ou un section CDATA, permet d'ajouter à la fin du contenu, les données textuelles indiquées.

Objet_Texte.appendData(Donnée)

La propriété data permet d'affecter des données textuelles à un noeud CharacterData, Comment, Text ou ProcessingInstruction.

Objet_Texte.data = Chaine_Caracteres

La méthode replaceData, dans les mêmes conditions que précitées, remplace un contenu textuel à une position et jusqu'à un nombre spécifié un texte fourni en argument.

Objet_Texte.replaceData(Position, Nombre, Donnée)

La méthode deleteData supprime un intervalle de texte à partir d'une position et jusqu'à un nombre spécifié.

Objet_Texte.deleteData(Position, Nombre)

La méthode normalize fusionne plusieurs noeuds textuels adjacents afin d'en produire un seul, normalisant ainsi, tous les éléments descendants.

Objet_Element.normalize

Par ailleurs, la méthode cloneNode effectue une duplication du noeud courant si la valeur est False ou du noeud et de sa descendance si la valeur est True.

Set Objet_Duplique = Objet_Noeud.cloneNode(True|False)

En outre, une autre méthode de duplication est applicable à un objet Selection.

Set Selection_Duplique = Objet_Selection.clone
Exemple [voir]
<%
  Dim Objet_Document, Objet_Style, oCommentaire
  Dim racine, PI_xml, PI_stylesheet, fichier_XSL
  Dim oAuteur, cAuteur, oDecription, cDescription
  Dim oNom, oOeuvres, oPoeme, cPoeme
  Dim auteur, description, titre
  Dim quatrain_A, quatrain_B, quatrain_C
  Dim quatrain_D, quatrain_E, saut

  Set Objet_Document = Server.CreateObject("MSXML2.DOMDocument.4.0")
  Set Objet_Style = Server.CreateObject("MSXML2.DOMDocument.4.0")

  fichier_XSL = Server.MapPath("recueil.xsl")
  Objet_Style.async = False
  Objet_Style.Load fichier_XSL

  Set racine = Objet_Document.createElement("recueil")
  Objet_Document.appendChild racine

  saut = vbCrLf & vbCrLf

  auteur = "Heinrich HEINE"

  description = "Heinrich HEINE vécut en Allemagne entre 1797 et 1856." _
            & "Il est un poète romantique par excellence, qui chante " _
            & "l'amour entre la cruelle déception et un certain cynisme. " _
            & "De plus, il a fortement influencé les milieux littéraires " _
            & "parisiens, qu'il ne cessa de fréquenter jusqu'à sa mort."

  titre = "Die Zeit"

  quatrain_A = "Ah! qu'il est lent, ah comme il traîne," & vbCrLf _
           & "le Temps horrible limaçon !" & vbCrLf _
           & "Sans pouvoir remuer un membre," & vbCrLf _
           & "je gis ici, cloué sur place."

  quatrain_B = "En ma cellule ne vient luire" & vbCrLf _
           & "nul rai de soleil ni d'espoir." & vbCrLf _
           & "Jusqu'à la fosse au cimetière," & vbCrLf _
           & "je suis voué à mon grabat."

  quatrain_C = "Mourir, c'est déjà fait, peut-être;" & vbCrLf _
           & "peut-être n'est-ce que fantômes," & vbCrLf _
           & "ces visions qui font la foire" & vbCrLf _
           & "toute la nuit dans mon cerveau."

  quatrain_D = "Oui c'est peut-être le spectrale" & vbCrLf _
           & "sarabande des dieux païens;" & vbCrLf _
           & "pour leur ébats ça leur va bien," & vbCrLf _
           & "le crâne creux d'un trépassé."

  quatrain_E = "Mais la folle, la douce orgie," & vbCrLf _
           & "ces bacchanales de la nuit," & vbCrLf _
           & "la main du squelette se crispe" & vbCrLf _
           & "au matin pour les esquisser."

  Set cPoeme = Objet_Document.createTextNode(quatrain_B)

  Set oAuteur = Objet_Document.createElement("auteur")
  Set oNom = Objet_Document.createElement("nom")
  Set cAuteur = Objet_Document.createTextNode(auteur)
  Set oDescription = Objet_Document.createElement("description")
  Set cDescription = Objet_Document.createTextNode(description)
  Set oOeuvres = Objet_Document.createElement("oeuvres")
  Set oPoeme = Objet_Document.createElement("poeme")
  oPoeme.setAttribute "titre", titre

  cPoeme.insertData 0, quatrain_A & saut
  cPoeme.insertData cPoeme.length, saut
  cPoeme.insertData cPoeme.length, quatrain_C & saut
  cPoeme.insertData cPoeme.length, quatrain_D & saut
  cPoeme.insertData cPoeme.length, quatrain_E

  oAuteur.appendChild oNom
  oDescription.appendChild cDescription
  oAuteur.appendChild oDescription

  oPoeme.appendChild cPoeme
  oOeuvres.appendChild oPoeme
  oAuteur.appendChild oOeuvres
  oNom.appendChild cAuteur

  oPoeme.normalize

  racine.appendChild oAuteur

  Set PI_xml = _
        Objet_Document.createProcessingInstruction("xml", _
                             "version='1.0' encoding='iso-8859-1'")
  Set PI_stylesheet = _
        Objet_Document.createProcessingInstruction("xml-stylesheet", _
                             "type='text/xsl' href='" & fichier_XSL & "'")

  Objet_Document.insertBefore PI_xml, racine
  Objet_Document.insertBefore PI_stylesheet, racine

  Set oCommentaire = _
        Objet_Document.createComment("Fichier créé le " & date & ".")

  racine.appendChild oCommentaire

  Objet_Document.save Server.MapPath("recueil.xml")

  Response.Write Objet_Document.transformNode(Objet_Style)

  Response.Write Objet_Document.transformNode(Objet_Style) _
             & "<h4>Le fichier XML est disponible à l'adresse " _
             & " suivante : " & Server.MapPath("recueil.xml") & "</h4>"

  Set Objet_Document = Nothing
  Set Objet_Style = Nothing
%>

9.5 / La sauvegarde d'un document XML

Suite à la manipulation d'une arborescence XML, il peut être nécessaire de conserver les modifications apportées au document.

La méthode save de l'objet DOMDocument, permet de sauvegarder un document XML dans un fichier au format adéquat.

Objet_Document.save(Nom_Fichier)
Exemple [voir]
Fichier : librairie.xml
<?xml version="1.0" encoding="iso-8859-1"?>
<librairie>
  <livre code="2841771431">
    <titre>XML IN A NUTSHELL</titre>
    <auteur id="29754995016048">HAROLD</auteur>
    <editeur>O'REILLY</editeur>
  </livre>
  <livre code="284082812X">
    <nom>XML ETAPE PAR ETAPE</nom>
    <auteur id="29754995016048">YOUNG M.</auteur>
    <editeur>MICROSOFT PRESS</editeur>
  </livre>
  <livre code="2744011002">
    <titre>LE CAMPUS DEVEL. WEB AVEC XHTML XML</titre>
    <auteur id="29754995016048">LADD ERIC</auteur>
    <editeur>CAMPUSPRESS FRANCE</editeur>
  </livre>
</librairie>
Fichier : traitement.asp
<%
  Set Objet_Document = Server.CreateObject("MSXML2.DOMDocument")
  Objet_Document.async = False
  Objet_Document.load Server.MapPath("librairie.xml")

  Set Objet_Texte = _
         Objet_Document.createTextNode(_
                     "LE CAMPUS DEVELOPPEUR WEB AVEC XHTML XML")
  Set oTitre = Objet_Document.documentElement.lastChild.firstChild
  Set Ancien_Titre = oTitre.firstChild
  oTitre.replaceChild Objet_Texte, Ancien_Titre

  Objet_Document.save Server.MapPath("librairie.xml")

  Set Objet_Document = Nothing
%>

10 / La manipulation XML avec ADO

Le langage XML devenant le support de base de données de prédilection sur Internet, ActiveX Data Objects fournissant une interface entre des sources de données et des applications web, se devait de prendre en charge les documents XML. Depuis sa version 2.1, ADO a développé diverses fonctionnalités destinées à manipuler du XML.

10.1 / L'ouverture d'un jeu d'enregistrements XML

Le langage ADO (ActiveX Data Objects) permet d'ouvrir des jeux d'enregistrements à partir de diverses sources XML telles qu'un fichier, un flux de données, un objet ASP Request ou même un objet DOMDocument.

L'ouverture d'un document XML par un objet Recordset se réalise selon différentes étapes.

Set Objet_Recordset = Server.CreateObject("ADODB.Recordset")
Set Objet_Recordset.ActiveConnection = Nothing
Objet_Recordset.CursorLocation = adUseClient
Objet_Recordset.CursorType = adOpenStatic
Objet_Recordset.LockType = adLockReadOnly
Objet_Recordset.Source = adresse_fichier.xml
Objet_Recordset.Open

L'objet Recordset ne parvient à ouvrir que des fichiers XML spécialement formaté et validé par un schéma. En fait, seuls des fichiers XML résultant d'un jeu d'enregistrements de base de données sont capables d'être directement traîtés par l'objet Recordset.

Espaces de noms des schémas
Déclaration
Description
xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
indique un espace de noms XML-Data contenant les éléments et attributs que définit le schéma du jeu d'enregistrement courant.
xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
indique la spécification des définitions des type de données.
xmlns:rs="urn:schemas-microsoft-com:rowset"
indique un espace de noms contenant les éléments et les attributs spécifiques aux propriétés et attributs d'un objet Recordset.
xmlns:z="#RowsetSchema"
indique le schéma du jeu d'enregistrement courant.
<xml 
           xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
           xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
           xmlns:rs="urn:schemas-microsoft-com:rowset"
           xmlns:z="#RowsetSchema">
  <s:Schema id="RowsetSchema">
    <s:ElementType name="row" content="eltOnly" ...>
      <s:AttributeType name="attribut" rs:number="1" ...>
        <s:datatype dt:type="type_données"
                          dt:maxlength="taille_max" .../>
      </s:AttributeType>
      ...
      <s:extends type="rs:rowbase"/>
    </s:ElementType>
  </s:Schema>

  <rs:data>
    <z:row attribut="valeur".../>
    ...
  </rs:data>
</xml>

Constituant un autre moyen d'ouvrir un fichier XML, l'objet ADO Stream possède un rôle central dans la conjonction entre le langage ActiveX Data Objects et le XML (eXtended Makup Language).

En effet, un flux de données binaires ou textuelles contenant des informations XML peut être aisément manipulé par l'objet Stream. Ce dernier est utilisé pour la lecture et l'écriture dans le flux mais aussi pour la réception de la source XML et l'envoi du résultat soit à un fichier, soit à un objet ASP Response, soit à un objet DOMDocument.

Dim Objet_Stream
Set Objet_Stream = Server.CreateObect("ADODB.Stream")
Objet_Stream.open adresse_fichier.xml

Une autre moyen permet de charger un fichier XML dans un objet Stream en utilisant la méthode LoadFromFile.

Objet_Stream.open
Objet_Stream.loadFromFile adresse_fichier.xml

Un objet Stream peut être ouvert à vide puis rempli par un contenu XML par l'intermédiaire de la méthode WriteText.

Objet_Stream.open
Objet_Stream.WriteText Chaîne_XML

L'objet Stream est tout à fait capable de charger un fichier XML non-compatible. Mais si par la suite, il doit être traité par l'objet Recordset, il est necessaire qu'il réponde aux critères exigés par ce-dernier.

Un objet Stream comportant un flux XML, peut servir à ouvrir un Recordset de la même manière qu'un fichier XML.

Objet_Recordset.Source = Objet_Stream

L'objet ASP Request contenant des données XML suite à un traîtement quelconque, peut délivrer son contenu à un objet Recordset ou Stream.

Const adCmdFile = 256
Objet_Recordset.Open Request, , , , adCmdFile

Objet_Stream.open Request
Exemple avec Recordset [voir]
<%@ Language=VBScript %>
<!-- #include file="adovbs.inc" -->
<html>
  <body>
    <%
      Dim i
      Dim Objet_Recordset
      Dim Resultat
      Set Objet_Recordset = Server.CreateObject("ADODB.Recordset")
      Objet_Recordset.CursorLocation = adUseClient
      Objet_Recordset.CursorType = adOpenStatic
      Objet_Recordset.LockType = adLockReadOnly
      fichier = Server.MapPath("livre.xml")
      Objet_Recordset.Source = fichier
      Objet_Recordset.Open

      Resultat = "<table border='1'>"
      Resultat = Resultat & "<tr>"

      For i = 0 to Objet_Recordset.Fields.Count - 1
        Resultat = Resultat & "<th>" & Objet_Recordset.Fields(i).Name & "</th>"
      Next
      Resultat = Resultat & "</tr>"

      Objet_Recordset.MoveNext
      Do While Not Objet_Recordset.EOF
        Resultat = Resultat & "<tr>"

        For i = 0 to Objet_Recordset.Fields.Count - 1
          Resultat = Resultat & "<td>" & Objet_Recordset.Fields(i).Value & "</td>"
        Next

        Objet_Recordset.MoveNext

        Resultat = Resultat & "</tr>"
      Loop

      Resultat = Resultat & "</table>"
    %>
    <%
      Objet_Recordset.Close
      Set Objet_Recordset = Nothing
    %>
    <h1>Contenu de la collection de livres</h1>
    <%= Resultat %>
    <br>
    <hr>
    <h3>Le fichier est située à l'adresse suivante :</h2>
    <blockquote><%= fichier %></blockquote>
  </body>
</html>
Exemple avec Stream [voir]
<%@ Language=VBScript %>
<!-- #include file="adovbs.inc" -->
<html>
  <body>
    <%
      Dim Objet_Stream, Objet_Recordset
      Dim Contenu_XML

      Set Objet_Stream = Server.CreateObject("ADODB.Stream")
      Objet_Stream.Charset = "Windows-1252"
      Objet_Stream.Open
      fichier = Server.mapPath("livre.xml")
      Objet_Stream.LoadFromFile fichier
      Contenu_XML = Objet_Stream.ReadText(adReadAll)

      Objet_Stream.Close

      Set Objet_Stream = Server.CreateObject("ADODB.Stream")
      Objet_Stream.Open
      Objet_Stream.WriteText Contenu_XML
      Objet_Stream.SaveToFile Server.mapPath("livre_copie.xml"), _
                                          adSaveCreateOverWrite

      Set Objet_Recordset = Server.CreateObject("ADODB.Recordset")
      Set Objet_Recordset.ActiveConnection = nothing
      Objet_Recordset.CursorLocation = adUseClient
      Objet_Recordset.CursorType = adOpenStatic
      Objet_Recordset.LockType = adLockReadOnly
      Set Objet_Recordset.Source = Objet_Stream
      Objet_Recordset.Open

      Objet_Stream.Close
      Set Objet_Stream = Nothing

      Resultat = "<table border='1'>"
      Resultat = Resultat & "<tr>"
      For i = 0 to Objet_Recordset.Fields.Count - 1
        Resultat = Resultat & "<td><b>" _
                         & Objet_Recordset.Fields(i).Name & "</b></td>"
      Next
      Objet_Recordset.MoveNext
      Resultat = Resultat & "</tr>"
      Do while not Objet_Recordset.EOF
        Resultat = Resultat & "<tr>"
        For i = 0 to Objet_Recordset.Fields.Count - 1
          Resultat = Resultat & "<td>" _
                           & Objet_Recordset.Fields(i).Value & "</td>"
        Next
        Objet_Recordset.MoveNext
        Resultat = Resultat & "</tr>"
      Loop
      Resultat = Resultat & "</table>"

      Objet_Recordset.Close
      Set Objet_Recordset = Nothing
    %>
    <h1>Contenu de la collection de livres</h1>
    <%= Resultat %>
    <br>
    <hr>
    <h3>Une copie du fichier "<%= fichier %>" 
                             est située à l'adresse suivante :</h2>
    <blockquote>
      <%= Server.mapPath("livre_copie.xml") %>
    </blockquote>
  </body>
</html>
Fichier : livre.xml
<xml 
        xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
        xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
        xmlns:rs="urn:schemas-microsoft-com:rowset"
        xmlns:z="#RowsetSchema">
  <s:Schema id="RowsetSchema">
    <s:ElementType name="row" content="eltOnly">
      <s:AttributeType name="id" rs:number="1"
                              rs:writeunknown="true">
        <s:datatype dt:type="string" dt:maxlength="7"
                          rs:fixedlength="true"
                          rs:maybenull="false"/>
      </s:AttributeType>
      <s:AttributeType name="nom"
                              rs:number="2"
                              rs:writeunknown="true">
        <s:datatype dt:type="string"
                          dt:maxlength="50"
                          rs:maybenull="false"/>
      </s:AttributeType>
      <s:AttributeType name="editeur"
                              rs:number="3"
                              rs:writeunknown="true">
        <s:datatype dt:type="string"
                          dt:maxlength="25"
                          rs:maybenull="false"/>
      </s:AttributeType>
      <s:AttributeType name="commentaire"
                              rs:number="4"
                              rs:writeunknown="true">
        <s:datatype dt:type="string"
                          dt:maxlength="250"
                          rs:maybenull="false"/>
      </s:AttributeType>
      <s:extends type="rs:rowbase"/>
    </s:ElementType>
  </s:Schema>
  <rs:data>
    <z:row id="ASP0012"
              nom="ASP, ADO, and XML Complete" 
              editeur="Sybex" 
              commentaire="Develop dynamic Web applications 
                                    with ASP, ADO and XML."/>
    <z:row id="XSL1207"
              nom="XSLT Programmer's reference"
              editeur="Wrox Press"
              commentaire="This book is for programmers who want 
                                    to learn how to use XSLT language to 
                                    develop web applications."/>
    <z:row id="ASP0342"
              nom="Mastering Active Server Pages 3"
              editeur="Sybex"
              commentaire="This book is Microsoft's technology
                                    for delivering dynamic, interactive
                                    Web applications."/>
    <z:row id="VBS8920"
              nom="Visual Basic Developper's guide to ASP and IIS"
              editeur="Sybex"
              commentaire="This core components of web application 
                                    development for programmers using Microsoft
                                    technologies are ASP and IIS."/>
  </rs:data>
</xml>

10.2 / La persistance XML

Le langage ADO (ActiveX Data Objects) possède la capacité de rendre persistant des jeux d'enregistrements au format XML dans divers récepteurs tels qu'un fichier, un flux de données, un objet ASP Response ou même un objet DOM.

Ainsi, des informations provenant de différentes sources de données peuvent être manipulées par ADO, puis enregistrer directement dans un fichier XML.

Const adPersistXML = 1
Set Objet_Recordset = Server.CreateObject("ADODB.Recordset")
Objet_Recordset.Open Source_Donnee, Chaine_Connection
Objet_Recordset.Save adresse_fichier.xml, adPersistXML

Il est également possible de conserver un objet Recordset dans un flux de données Stream.

Set Objet_Stream = Server.CreateObject("ADODB.Stream")
Objet_Recordset.Save Objet_Stream, adPersistXML

Une autre possibilité permet de retourner directement dans une page Web, un ilôt de données (Data Islands) XML, en utilisant l'objet ASP Response à la place de la source de données dans la méthode Save de l'objet Recordset.

Objet_Recordset.Save Response, adPersisXML

Néanmoins, il ne faut pas oublier d'encadrer le script ASP d'insertion par le balisage spécifique aux ilôts de données.

<XML id="Identificateur">
  <% 'Script d'insertion %>
</XML>

D'autre part, le prologue d'un document XML ne doit pas apparaître au sein de l'ilôt de données. En conséquence, les déclarations XML et de type de document ainsi que les instructions de traîtement doivent être éliminer avant l'insertion des données dans l'ilôt XML.

<?xml version="1.0" encoding="encodage" standalone="yes|no"?>
<!DOCTYPE racine SYSTEM "definition.dtd">
<?xml-stylesheet type="text/xsl" href="style.xsl"?>

En outre, le langage ADO est capable de sauvegarder des jeux d'enregistrements dans un objet DOMDocument, à partir duquel pourra se réaliser la manipulation des données XML.

Set Objet_Document = _
             Server.CreateObject("Msxml2.DOMDocument")
Objet_Recordset.Save Objet_Document, adPersistXML

L'objet Stream permet de rendre un jeu d'enregistrements persistant de la même façon qu'un Recordset.

Exemple avec Recordset [voir]
Fichier : response.asp
<%@ LANGUAGE=VBSCRIPT %>
<!-- METADATA type="typelib"
       FILE="C:Program FilesFichiers communsSystemadomsado15.dll" -->
<%
  Dim Objet_Connection
  Dim Objet_Recordset
  Dim Chaine_connexion

  Response.ContentType = "text/xml"

  Chaine_connexion = "Provider=SQLOLEDB; Data Source="& _
                 Request.ServerVariables("SERVER_NAME") & _
                 "; Initial Catalog=pubs; User ID=sa; Password=xxx"

  Set Objet_Connection = Server.CreateObject("ADODB.Connection")
  Objet_Connection.Open Chaine_connexion
  Requete_SQL = "SELECT emp_id, fname, lname, hire_date FROM employee"

  Set Objet_Recordset = Objet_Connection.Execute(Requete_SQL)

  Objet_Recordset.Save Response, adPersistXML
%>
Fichier : ilot_response.asp
<html>
  <body>
    <XML id="employee" src="response.asp"></XML>

    <table border="0" bgcolor="#000000" datasrc="#employee">
      <tr>
        <td>
          <table border="0" bgcolor="#FFFFFF"
                      datasrc="#employee" datafld="rs:data">
            <tr>
              <td>
                <table border="1">
                  <tr>
                    <th width="120">Identificateur</th>
                    <th width="100">Nom</th>
                    <th width="100">Prénom</th>
                    <th width="200">Date d'entrée</th>
                  </tr>
                </table>
              </td>
            </tr>
            <tr>
              <td>
                <table border="1"
                            datasrc="#employee" datafld="rs:data.z:row">
                  <tr>
                    <th width="120" align="left">
                      <span datafld="emp_id"></span>
                    </th>
                    <td width="100">
                      <span datafld="fname"></span>
                    </td>
                    <td width="100">
                      <span datafld="lname"></span>
                    </td>
                    <td width="200">
                      <span datafld="hire_date"></span>
                    </td>
                  </tr>
                </table>
              </td>
            </tr>
          </table>
        </td>
      <tr>
    </table>
  </body>
</html>
Exemple avec Stream [voir]
<%@ Language=VBScript %>
<!-- #include file="adovbs.inc" -->
<html>
  <body>
    <%
      Dim Objet_Stream
      Dim Contenu_XML, Resultat
      Dim fichier

      Set Objet_Stream = Server.CreateObject("ADODB.Stream")
      Objet_Stream.Charset = "Windows-1252"
      Objet_Stream.Open
      fichier = Server.mapPath("recueil.xml")
      Objet_Stream.LoadFromFile fichier
      Contenu_XML = Objet_Stream.ReadText(adReadAll)

      prologue = "<?xml version=""1.0"" encoding=""iso-8859-1""?>"
      Resultat = Replace(Contenu_XML, prologue, "<XML id=""ilot_donnee"">")
      Resultat = Resultat & "</XML>"

      Objet_Stream.Close
      Set Objet_Stream = Nothing
    %>
    <%= Resultat %>
    <h2>Le document HTML contient un ilôt XML contenant les
             données du fichier situé à l'adresse suivante :</h2>
    <blockquote><%= fichier %></blockquote>
    <p>Pour voir l'ilôt, affichez le menu contextuel 
           et cliquez sur <i>Afficher la source</i>.</p>
  </body>
</html>
Exemple avec DOMDocument [voir]
<%@ LANGUAGE=VBSCRIPT %>
<!-- METADATA type="typelib"
  FILE="C:Program FilesFichiers communsSystemadomsado15.dll" -->
<html>
  <head>
    <%
      Dim Objet_Connection
      Dim Objet_Recordset
      Dim Chaine_connexion
      Dim Requete_SQL
      Dim Objet_Document
      Dim affichage

      Set Objet_Document = Server.CreateObject("MSXML2.DOMDocument")

      Chaine_connexion = "Provider=SQLOLEDB; Data Source="& _
                     Request.ServerVariables("SERVER_NAME") & _
                     "; Initial Catalog=pubs; User ID=sa; " & _
                     "Password="Requete_SQL = "SELECT * FROM employee"

      Set Objet_Connection = Server.CreateObject("ADODB.Connection")
      Objet_Connection.Open Chaine_connexion

      Set Objet_Recordset = Objet_Connection.Execute(Requete_SQL)

      Objet_Recordset.Save Objet_Document, adPersistXML

      affichage = Visualise_Noeud(Objet_Document, 0)

      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
    %>
  </head>
  <body>
    <div><%= affichage %></div>
  </body>
</html>