Objet script XMLDocument

  • Rversion finale: Yokohama
  • Mis à jour 30 janv. 2025
  • 3 minutes de lecture
  • Couche d’objet JavaScript pour analyser et extraire 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 d’une invocation de service Web ou 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 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 une analyse XML d’une chaîne XML qualifiée en espace de nom, 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 nom 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 ne tient pas compte de l’espace de noms, cela signifie que si vous localisez un nom de nœud contenant un espace de noms, par exemple. "<noms :myelement> ... « , la chaîne de recherche XPath serait « //myelement »
    Voici des exemples de localisation d’un nœud par son XPath et d’obtention 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 par XPath et utilisent l’API sur le nœud et l’élément pour obtenir des attributs et de la 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"
    Voici un exemple d’analyse d’une chaîne XML qualifiée d’espaces de nom.
    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 a donc toutes les mêmes API.

    L’exemple suivant montre comment interroger un nœud pour obtenir son attribut par position
    node = xmldoc.getNode("//two");
    // node.getAttributes().item(0).getNodeValue() == "xxx"
    
    str = xmldoc.getAttribute("//two", "att");
    // str == "xxx"
    XPath a également une syntaxe de requête pour 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>