Objet du script XMLDocument
Couche d’objet JavaScript pour l’analyse et l’extraction des données XML d’un document XML (chaîne).
Utilisez cette classe JavaScript pour instancier un objet à partir d’une chaîne XML, généralement une valeur de retour provenant d’un appel de service Web, ou de la charge utile XML de la file d’attente ECC. L’utilisation de l’objet XMLDocument dans une règle métier JavaScript vous permet d’interroger directement les valeurs à partir des éléments et attributs XML.
Constructeur
Le constructeur d’un objet de script crée une nouvelle instance de l’objet à utiliser.
var xmlString = "<test>" +
" <one>" +
" <two att=\"xxx\">abcd1234</two>" +
" <three boo=\"yah\" att=\"yyy\">1234abcd</three>" +
" <two>another</two>" +
" </one>" +
" <number>1234</number>" +
"</test>";
var xmldoc = new XMLDocument(xmlString);Pour effectuer une analyse XML d’une chaîne XML qualifiée par espace de noms, spécifiez « vrai » pour le deuxième argument du constructeur XMLDocument. Voici un exemple d’analyse et de chaîne XML qui contient la qualification d’espace de noms de ses éléments.
var xmlString = "<bk:book xmlns:bk='urn:loc.gov:books' xmlns:isbn='urn:ISBN:0-395-36341-6'>" +
"<bk:title>Cheaper by the Dozen</bk:title>" +
"<isbn:number>1568491379</isbn:number>" +
"</bk:book>";
var xmldoc = new XMLDocument(xmlString, true); // XML document is name space aware
Localisation des noeuds et des éléments
Maintenant que nous avons l’objet XMLDocument, nous pouvons appeler les API suivantes pour localiser les nœuds et les éléments du document XML, ainsi que pour en extraire directement du texte. La syntaxe de requête pour localiser les nœuds et les attributs est basée sur XPath.
Remarque :
L’analyse XML avec cet objet ne prend pas en charge l’espace de noms, cela signifie que si vous localisez un nom de nœud contenant un espace de noms, par exemple. « <noms :monélément> ... « , la chaîne de recherche XPath serait « //myelement »
Vous trouverez ci-dessous des exemples de localisation d’un noeud par son XPath et d’extraction de la valeur textuelle du noeud résultant.
var str = xmldoc.getNodeText("//two"); // returns the first occurrence of the node
// str == "abcd1234"
str = xmldoc.getNodeText("//three");
// str == "1234abcd"
str = xmldoc.getNodeText("/test/one/*");
// str == "abcd1234"
str = xmldoc.getNodeInt("//number");
// str == 1234
Les exemples suivants localisent le nœud par XPath et utilisent l’API sur le nœud et l’élément pour obtenir des attributs et une valeur.
var node = xmldoc.getNode("/test/one/two");
// node.getNodeName() == "two"
// node.getNodeType() == "1" // 1 == ELEMENT_NODE
// node.getLastChild().getNodeType() == "3" // 3 == TEXT_NODE
// node.getLastChild().getNodeValue() == "abcd1234"Vous pouvez également utiliser les fonctions pratiques suivantes pour obtenir le nom et le type de nœud
str = xmldoc.getNodeName("//three");
// str == "three"
str = xmldoc.getNodeType("//three");
// str == "1"Vous pouvez également obtenir une liste de nœuds que vous pouvez itérer ou accéder directement par position
var nodelist = xmldoc.getNodes("//one/*"); // two, three, and two
// nodelist.getLength() == "3"
// nodelist.item(0).getNodeName() == "two"
// nodelist.item(1).getNodeName() == "three"Voici un exemple d’analyse d’une chaîne XML qui est qualifiée avec des espaces de noms.
var xmlString = "<bk:book xmlns:bk='urn:loc.gov:books' xmlns:isbn='urn:ISBN:0-395-36341-6'>" +
"<bk:title>Cheaper by the Dozen</bk:title>" +
"<isbn:number>1568491379</isbn:number>" +
"</bk:book>";
var xmldoc = new XMLDocument(xmlString, true);
var str = xmldoc.getNodeText("//bk:title"); // returns the first occurence of the node
gs.log(str);
str = xmldoc.getNodeText("/bk:book/*");
gs.log(str);
str = xmldoc.getNodeInt("//isbn:number");
gs.log(str);Obtention des valeurs d’attributs
Un attribut n’est qu’une extension d’un nœud et possède donc les mêmes API.
L’exemple suivant montre comment demander à un nœud d’obtenir son attribut par position
node = xmldoc.getNode("//two");
// node.getAttributes().item(0).getNodeValue() == "xxx"
str = xmldoc.getAttribute("//two", "att");
// str == "xxx"XPath dispose également d’une syntaxe de requête permettant de localiser directement le nœud d’attribut, par exemple
str = xmldoc.getNodeText("//*[@att=\"yyy\"]");
// str == "1234abcd"
str = xmldoc.getNode("//@boo").getNodeValue();
// str == "yah"
Création de nouveaux éléments
Un élément XML peut être créé à n’importe quel niveau du document XML une fois qu’il a été créé. Utilisez la fonction setCurrent pour positionner l’endroit où le nouvel élément sera créé en tant qu’élément enfant, et utilisez la fonction createElement pour créer l’élément.
var xmlString = "<test>" +
" <one>" +
" <two att=\"xxx\">abcd1234</two>" +
" <three boo=\"yah\" att=\"yyy\">1234abcd</three>" +
" <two>another</two>" +
" </one>" +
" <number>1234</number>" +
"</test>";
var xmldoc = new XMLDocument(xmlString);
xmldoc.createElement("new", "test"); // creates the new element at the document element level if setCurrent is never called
xmldoc.createElement("new2"); // calling without a value will create a new element by itself
var el = xmldoc.createElement("new3");
xmldoc.setCurrent(el); // this is now the parent of any new elements created subsequently using createElement()
xmldoc.createElement("newChild", "test");Le document XML obtenu ressemble à ceci
<test>
<one>
<two att="xxx">abcd1234</two>
<three boo="yah" att="yyy">1234abcd</three>
<two>another</two>
</one>
<number>1234</number>
<new>test<new>
<new2/>
<new3>
<newChild>test</newChild>
</new3>
</test>