Objet de script XMLDocument
Couche d’objet JavaScript pour l’analyse et l’extraction de données XML à partir 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 d’un appel de service Web, ou la charge utile XML d’une file d’attente ECC. L’utilisation de l’objet XMLDocument dans une règle métier JavaScript vous permet d’interroger directement des valeurs à partir des éléments et attributs XML.
Constructeur
Le constructeur d’un objet 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 l’analyse XML d’une chaîne XML qui est qualifiée d’espace de noms, spécifiez « vrai » pour le deuxième argument du constructeur XMLDocument. Ce qui suit est 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 nœuds 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 le 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 n’est pas compatible avec 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 nœud à l’aide de son XPath et d’extraction de la valeur de texte du nœud 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 à l’aide de 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 auxquels vous pouvez 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"Ce qui suit est 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 de l’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 qui en résulte 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>