Objet du script XMLDocument

  • Rversion finale: Washingtondc
  • Mis à jour 1 févr. 2024
  • 3 minutes de lecture
  • 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. « &lt;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>