XMLDocument2 – Scoped, Global

  • Freigeben Version: Washingtondc
  • Aktualisiert 1. Februar 2024
  • 7 Minuten Lesedauer
  • Die XMLDocument2- API stellt einen JavaScript-Objektwrapper zum Analysieren und Extrahieren von XML-Daten aus einer XML-Zeichenfolge bereit.

    Verwenden Sie diese JavaScript-Klasse, um ein Objekt aus einer XML-Zeichenfolge zu erstellen, normalerweise einen Rückgabewert eines Webserviceaufrufs oder die XML-Payload der ECC-Warteschlange. Wenn Sie das XMLDocument2-Objekt in einer JavaScript-Business Rule verwenden, können Sie Werte direkt aus den XML-Elementen und -Attributen abfragen.

    Eine XML-Zeichenfolge hat eine Baumstruktur, und die Teile der Struktur werden Knoten genannt. Ein XMLDocument2-Objekt verarbeitet zwei Knotentypen, Element und Dokumentelement. Ein Elementknoten ist ein Knoten mit einem Namen und möglicherweise Attributen und untergeordneten Knoten. Ein Dokumentelementknoten ist der Stammknoten des XML-Baums. Es ist der einzige Knoten ohne einen übergeordneten Knoten.

    Hinweis:
    Diese API funktioniert für bereichsbezogene oder globale Anwendungen.

    Scoped XMLDocument2 – createElement(String name)

    Erzeugt einen Elementknoten und fügt ihn dem aktuellen Knoten hinzu. Der Elementname ist die als Parameter übergebene Zeichenfolge. Das neue Element hat keine untergeordneten Textknoten.

    Tabelle : 1. Parameter
    Name Typ Beschreibung
    Name Zeichenfolge Name des neuen Elements.
    Tabelle : 2. Ergebnisse
    Typ Beschreibung
    XMLNode Aktueller XML-Knoten.
    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 XMLDocument2();
    xmlDoc.parseXML(xmlString); 
    xmlDoc.createElement("new2"); 
     
    gs.info(xmlDoc);
    Ausgabe:
    ?xml version="1.0" encoding="UTF-8"?>
    <test>  
        <one>    
            <two att="xxx">abcd1234</two>    
                <three att="yyy" boo="yah">1234abcd</three>    
            <two>another</two>  
        </one>  
        <number>1234</number>
        <new2></new2>
    </test>

    Scoped XMLDocument2 – createElementWithTextValue(String name, String value)

    Erzeugt und einen Elementknoten und fügt ihn mit einem untergeordneten Textknoten zum aktuellen Knoten hinzu.

    Tabelle : 3. Parameter
    Name Typ Beschreibung
    Name Zeichenfolge Name des hinzuzufügenden Elements.
    Wert Zeichenfolge Textwert des Elements.
    Tabelle : 4. Ergebnisse
    Typ Beschreibung
    XMLNode Aktueller XML-Knoten.
    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 XMLDocument2();
    xmlDoc.parseXML(xmlString); 
    xmlDoc.createElementWithTextValue("new", "test");
    gs.info(xmlDoc);
    Ausgabe:
    <?xml version="1.0" encoding="UTF-8"?>
        <test>
            <one>
                <two att="xxx">abcd1234</two>    
                <three att="yyy" boo="yah">1234abcd</three>    
                <two>another</two>  
            </one>  
            <number>1234</number>
            <new>test</new>
        </test>

    Scoped XMLDocument2 – getDocumentElement()

    Ruft den Dokumentelementknoten des XMLdocument2-Objekts ab. Der Dokumentelementknoten ist der Stammknoten.

    Tabelle : 5. Parameter
    Name Typ Beschreibung
    Keine
    Tabelle : 6. Ergebnisse
    Typ Beschreibung
    XMLNode Dokumentelement.
    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 XMLDocument2();
    xmlDoc.parseXML(xmlString);
    //returns the root node of the document tree.
    var rootNode = xmlDoc.getDocumentElement();
    gs.info(rootNode.getTextContent());
    Ausgabe:
    abcd1234    1234abcd    another    1234

    Scoped XMLDocument2 – getFirstNode(String xPath)

    Ruft den ersten Knoten im angegebenen xPath ab.

    Diese Methode unterstützt nur eine Teilmenge von Prädikat-xPath-Ausdrücken. Nehmen Sie beispielsweise das folgende Dokument an:
    <store> 
        <resources company="ABC Inc"> 
            <resources type="servers" /> 
        </resources> 
        <resources company="XYZ Inc"> 
            <resource type="bookstore"> 
                <book> 
                    <title>Windows</title> 
                    <price>10</price> 
                </book> 
                <book year="2009"> 
                    <title>Harry Potter</title> 
                    <price>50</price> 
                </book> 
                <book year="1999"> 
                    <title>Learning XML</title> 
                    <price>120</price> 
                </book> 
                <book year="2019"> 
                    <title>Learning Java</title> 
                    <price>99</price> 
                </book> 
            </resource> 
        </resources> 
    </store> 
    Diese Methode unterstützt die folgenden xPath-Ausdrücke mit Prädikaten:
    "/store/resources/resource[@type='bookstore']/book[@year='1999']", 
    "/store/resources/resource[@type='bookstore']/book[@year]", 
    "/store/resources/resource[@type='bookstore']/book[price > 100]" 
    Die folgenden xPath-Ausdrücke mit Prädikaten werden jedoch nicht unterstützt:
    "/store/resources/resource[@type='bookstore']/book[2]", 
    "/store/resources/resource[@type='bookstore']/book[last()]", 
    "/store/resources/resource[@type='bookstore']/book[position()>2]" 

    Um dies zu umgehen, verwenden Sie xPath ohne Prädikate, z. B. "/store/resources/resource[@type='bookstore']/book"), und filtern Sie dann die Knoten im Skript mit den Methoden getFirstNode() und getNextNode().

    Tabelle : 7. Parameter
    Name Typ Beschreibung
    xPath Zeichenfolge Der xPath, von dem der Knoten abgerufen werden soll.
    Tabelle : 8. Ergebnisse
    Typ Beschreibung
    XMLNode Erster Knoten.
    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 XMLDocument2();
    xmlDoc.parseXML(xmlString);
    var foo = xmlDoc.getFirstNode('/test/one/two');
    gs.info(foo.getTextContent());
    Ausgabe:
    abcd1234

    Scoped XMLDocument2 – getNextNode(Object current)

    Ruft den Knoten nach dem angegebenen Knoten ab.

    Tabelle : 9. Parameter
    Name Typ Beschreibung
    current Objekt Aktueller Knoten.
    Tabelle : 10. Ergebnisse
    Typ Beschreibung
    XMLNode Nächster Knoten.
    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 XMLDocument2();
    xmlDoc.parseXML(xmlString);
    var foo = xmlDoc. getFirstNode('/test/one/two');
    var foo2 = xmlDoc.getNextNode(foo);
    gs.info(foo.getTextContent());
    gs.info(foo2.getTextContent());
    Ausgabe:
    abcd1234
    
    another

    Scoped XMLDocument2 – getNode(String xPath)

    Ruft den im xPath angegebenen Knoten ab.

    Hinweis:
    Diese Methode ist für die Verwendung mit kleinen Dokumenten gedacht, da sie das gesamte Dokument analysiert, um dem xPath-Ausdruck zu entsprechen. Wenn das Dokument zu groß ist, kann ein Fehler aufgrund von Speichermangel auftreten. Verwenden Sie für große Dokumente die Methoden getFirstNode(String xPath) und getNextNode(Object current), die so konzipiert sind, dass sie das Dokument durchlaufen, ohne das gesamte Dokument zu analysieren.
    Tabelle : 11. Parameter
    Name Typ Beschreibung
    xPath Zeichenfolge xPath des abzurufenden Knotens.
    Tabelle : 12. Ergebnisse
    Typ Beschreibung
    XMLNode Aktueller XML-Knoten.
    /*
     * Checks if given node indeed of given tag.
     * Params:
     *  tag - String, name of tag to check
     *  node - XMLNode, node in which to check for the tag
     * Returns:
     *  true, if tag is present
     *  false, otherwise
     */
    function isNodeOfTag (node, tag) {
      try {
        if (tag == node.getNodeName()) {
          gs.info("Given node belongs to tag " + tag);
          return true;
        }
      } catch (error) {
        gs.error("Given node might not belong to tag " + tag + ". Error while checking: " + error);
        return false;
      }
    }
    
    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 XMLDocument2();
    xmlDoc.parseXML(xmlString);
    
    var node = xmlDoc.getNode("/test/one/two"); // tag 'two' is present in this XML.
    isNodeOfTag(node, "two");
    
    var node = xmlDoc.getNode("/test/one/four"); // tag 'four' is not present in this XML.
    isNodeOfTag(node, "four");
    Ausgabe:
    Given node belongs to tag two
    Given node might not belong to tag four. Error while checking: java.lang.NullPointerException

    Scoped XMLDocument2 – getNodeText(String xPath)

    Ruft alle untergeordneten Textknoten aus dem Knoten ab, auf den im angegebenen XPath verwiesen wird.

    Tabelle : 13. Parameter
    Name Typ Beschreibung
    xPath Zeichenfolge XPath des abzurufenden Texts.
    Tabelle : 14. Ergebnisse
    Typ Beschreibung
    Zeichenfolge Untergeordnete Textelemente im XPath.
    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 XMLDocument2();
    xmlDoc.parseXML(xmlString); 
    gs.info(xmlDoc.getNodeText("//two"));

    Ausgabe:

    abcd1234

    Scoped XMLDocument2 – parseXML(String xmlDoc)

    Analysiert die XML-Zeichenfolge und lädt sie in das XMLDocument2-Objekt.

    Tabelle : 15. Parameter
    Name Typ Beschreibung
    xmlDoc Zeichenfolge Zu analysierendes Dokument.
    Tabelle : 16. Ergebnisse
    Typ Beschreibung
    Boolean Kennzeichnung, die angibt, ob der Inhalt analysiert wurde.

    In diesem Beispiel wird der xmlString analysiert und in das xmlDocument2-Objekt geladen.

    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 XMLDocument2();
    xmlDoc.parseXML(xmlString); 
    var rootNode = xmlDoc.getDocumentElement();

    Scoped XMLDocument2 – setCurrentElement(XMLNode element)

    Macht den als Parameter übergebenen Knoten zum aktuellen Knoten.

    Tabelle : 17. Parameter
    Name Typ Beschreibung
    element XMLNode Elementknoten, der als aktueller Knoten festgelegt werden soll.
    Tabelle : 18. Ergebnisse
    Typ Beschreibung
    void
    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 XMLDocument2();
    xmlDoc.parseXML(xmlString);
    //returns the root node of the document tree.
    var rootNode = xmlDoc.getDocumentElement(); //returns org.w3c.dom.Element
    // sets the root node as the current element
    xmlDoc.setCurrentElement(rootNode);

    Scoped XMLDocument2 – setEnableCDATAReporting(Boolean enable)

    Legt fest, ob Knoten nach der Analyse als CDATA oder normaler Text behandelt werden. Die CDATA-Berichterstellung ist standardmäßig deaktiviert.

    Diese Methode muss mit Scoped XMLDocument2 – parseXML(String xmlDoc)aufgerufen werden.

    Siehe auch: Scoped XMLNode – isCDATANode().

    Tabelle : 19. Parameter
    Name Typ Beschreibung
    enable Boolean Kennzeichnung, die angibt, ob CDATA-Knoten als CDATA- oder reguläre Textknoten behandelt werden sollen.
    Gültige Werte:
    • true: CDATA-Berichterstellung aktivieren.
    • false: Behandelt CDATA-Knoten nach der Analyse als reguläre Textknoten und verkettet sie mit dem angrenzenden Text.

    Standardwert: False

    Tabelle : 20. Ergebnisse
    Typ Beschreibung
    Keine

    Das folgende Beispiel zeigt, wie CDATA in einem Element mit aktivierter CDATA-Berichterstellung analysiert wird. Das Ergebnis von content.getFirstChild() ist ein Element, das den Textwert anotherenthält. Dieses Element enthält intern die Informationen, die es als CDATA-Typ identifizieren. Das Ergebnis von content.getLastChild() ist ein Element, das den Textwert elemententhält. Dieses Element enthält die Informationen intern als Texttyp.

    var xmlString = "<test>" +
      "  <one>" +
      "    <three boo=\"yah\" att=\"yyy\">1234abcd</three>" +
      "    <two><![CDATA[another]]>element</two>" +
      "  </one>" +
      "  <number>1234</number>" 
      "</test>";
    var xmlDoc = new XMLDocument2();
    xmlDoc.setEnableCDATAReporting(true); // Enable CDATA reporting
    xmlDoc.parseXML(xmlString);
    var content = xmlDoc.getFirstNode('/test/one/two');
    gs.info(content.getFirstChild().getTextContent()); // prints "another"
    gs.info(content.getLastChild().getTextContent()); // prints "element"

    Ausgabe:

    another
    element
    Hinweis:
    Ohne die im Beispiel aktivierte CDATA-Berichterstellung verkettet das gesamte untergeordnete Element die CDATA als Text mit dem Rest des Texts (element) in jeder Zeile wie folgt:
    anotherelement
    anotherelement

    Scoped XMLDocument2 – setNamespaceAware(Boolean aware)

    Bei der Einstellung „true“ verarbeitet das XMLDocument2-Objekt das Dokument mit XML-Namespaces.

    Wenn Sie dies nicht festlegen, wird ein XML-Dokument mit Namespaces nicht ordnungsgemäß aufgelistet, und eine XPath-Suche schlägt fehl. 

    Tabelle : 21. Parameter
    Name Typ Beschreibung
    aware Boolean Bei „true“ verarbeitet das XMLDocument2-Objekt das Dokument mit XML-Namespaces.
    Tabelle : 22. Ergebnisse
    Typ Beschreibung
    void

    Scoped XMLDocument2 – toString()

    Gibt eine Zeichenfolge mit XML zurück.

    Tabelle : 23. Parameter
    Name Typ Beschreibung
    Keine
    Tabelle : 24. Ergebnisse
    Typ Beschreibung
    Zeichenfolge Zeichenfolge mit XML.
    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 XMLDocument2();
    xmlDoc.parseXML(xmlString);
    gs.info(xmlDoc.toString());
    Ausgabe – Zeilenumbrüche wurden zur besseren Lesbarkeit der Ausgabe hinzugefügt.
    <?xml version="1.0" encoding="UTF-8"?>
    <test>  
    <one>    
    <two att="xxx">abcd1234</two>    
    <three att="yyy" boo="yah">1234abcd</three>    
    <two>another</two>  
    </one>  
    <number>1234</number>
    </test>

    Scoped XMLDocument2 – XMLDocument2()

    Erstellt ein XMLDocument2-Objekt.

    Tabelle : 25. Parameter
    Name Typ Beschreibung
    Keine

    Scoped XMLDocument2 – XMLDocument2( GlideScriptableInputStream inputStream)

    Erstellt ein XMLDocument2-Objekt aus einem Anhang-Stream.

    Tabelle : 26. Parameter
    Name Typ Beschreibung
    inputStream GlideScriptableInputStream Eingabe-Stream, den das XMLDocument2-Objekt kapselt.