XMLDocument2: Bereichsbezogen, Global

  • Freigeben Version: Xanadu
  • Aktualisiert 1. August 2024
  • 7 Minuten Lesedauer
  • Die XMLDocument2- API ist ein JavaScript-Objekt-Wrapper zum Analysieren und Extrahieren von XML-Daten aus einer XML-Zeichenfolge.

    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 – XMLDocument2()

    Erstellt ein XMLDocument2-Objekt.

    Tabelle : 1. Parameter
    Name Typ Beschreibung
    Keine

    Scoped XMLDocument2 – XMLDocument2( GlideScriptableInputStream inputStream)

    Erstellt ein XMLDocument2-Objekt aus einem Anhang-Stream.

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

    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 : 3. Parameter
    Name Typ Beschreibung
    Name Zeichenfolge Name des neuen 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.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 : 5. Parameter
    Name Typ Beschreibung
    Name Zeichenfolge Name des hinzuzufügenden Elements
    Wert Zeichenfolge Textwert des Elements.
    Tabelle : 6. 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 : 7. Parameter
    Name Typ Beschreibung
    Keine
    Tabelle : 8. 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. Angenommen, es handelt sich um das folgende Dokument:
    <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 : 9. Parameter
    Name Typ Beschreibung
    xPath Zeichenfolge Der xPath, von dem der Knoten abgerufen werden soll.
    Tabelle : 10. 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 : 11. Parameter
    Name Typ Beschreibung
    current Objekt Aktueller Knoten.
    Tabelle : 12. 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 den xPath-Ausdruck zu entsprechen. Wenn das Dokument zu groß ist, kann ein Fehler aufgrund von unzureichendem Arbeitsspeicher auftreten. Verwenden Sie für große Dokumente die Methoden getFirstNode(String xPath) und getNextNode(Object current), die das Streaming durch das Dokument ermöglichen, ohne das gesamte Dokument zu analysieren.
    Tabelle : 13. Parameter
    Name Typ Beschreibung
    xPath Zeichenfolge xPath des abzurufenden Knotens.
    Tabelle : 14. 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 : 15. Parameter
    Name Typ Beschreibung
    xPath Zeichenfolge XPath des abzurufenden Texts.
    Tabelle : 16. Ergebnisse
    Typ Beschreibung
    Zeichenfolge Untergeordnete Elemente des Texts 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 : 17. Parameter
    Name Typ Beschreibung
    xmlDoc Zeichenfolge Zu analysierendes Dokument.
    Tabelle : 18. 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 : 19. Parameter
    Name Typ Beschreibung
    element XMLNode Elementknoten, der als aktueller Knoten festgelegt werden soll.
    Tabelle : 20. 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);

    Bereichsbezogenes XML-Dokument2 – 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: Bereichsbezogener XMLNode – isCDATANode().

    Tabelle : 21. Parameter
    Name Typ Beschreibung
    enable Boolean Kennzeichnung, die angibt, ob CDATA-Knoten als CDATA- oder reguläre Textknoten behandelt werden sollen.
    Gültige Werte:
    • „wahr“: CDATA-Reporting aktivieren.
    • „falsch“: Behandelt CDATA-Knoten nach der Analyse als normale Textknoten und verkettet sie mit dem angrenzenden Text.

    Standardwert: False

    Tabelle : 22. Ergebnisse
    Typ Beschreibung
    Keine

    Das folgende Beispiel zeigt, wie CDATA in einem Element bei aktivierter CDATA-Berichterstellung analysiert werden. Das Ergebnis von „content.getFirstChild() “ ist ein Element, das den Textwert„other“ enthält. Dieses Element enthält intern die Informationen, die es als CDATA-Typ identifizieren. Das Ergebnis von „content.getLastChild() “ ist ein Element, das das Textwertelement enthält. Dieses Element enthält intern die Informationen 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 aktivierte CDATA-Berichterstellung verkettet das gesamte untergeordnete Element CDATA als Text mit dem restlichen Text (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 : 23. Parameter
    Name Typ Beschreibung
    aware Boolean Bei „true“ verarbeitet das XMLDocument2-Objekt das Dokument mit XML-Namespaces.
    Tabelle : 24. Ergebnisse
    Typ Beschreibung
    void

    Scoped XMLDocument2 – toString()

    Gibt eine Zeichenfolge mit XML zurück.

    Tabelle : 25. Parameter
    Name Typ Beschreibung
    Keine
    Tabelle : 26. 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>