XMLDocument2: Bereichsbezogen, Global
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.
Scoped XMLDocument2 – XMLDocument2()
Erstellt ein XMLDocument2-Objekt.
| Name | Typ | Beschreibung |
|---|---|---|
| Keine |
Scoped XMLDocument2 – XMLDocument2( GlideScriptableInputStream inputStream)
Erstellt ein XMLDocument2-Objekt aus einem Anhang-Stream.
| 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.
| Name | Typ | Beschreibung |
|---|---|---|
| Name | Zeichenfolge | Name des neuen Elements. |
| 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);
?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.
| Name | Typ | Beschreibung |
|---|---|---|
| Name | Zeichenfolge | Name des hinzuzufügenden Elements |
| Wert | Zeichenfolge | Textwert des Elements. |
| 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);
<?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.
| Name | Typ | Beschreibung |
|---|---|---|
| Keine |
| 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());
abcd1234 1234abcd another 1234Scoped XMLDocument2 – getFirstNode(String xPath)
Ruft den ersten Knoten im angegebenen xPath ab.
<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> "/store/resources/resource[@type='bookstore']/book[@year='1999']",
"/store/resources/resource[@type='bookstore']/book[@year]",
"/store/resources/resource[@type='bookstore']/book[price > 100]" "/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().
| Name | Typ | Beschreibung |
|---|---|---|
| xPath | Zeichenfolge | Der xPath, von dem der Knoten abgerufen werden soll. |
| 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());
abcd1234Scoped XMLDocument2 – getNextNode(Object current)
Ruft den Knoten nach dem angegebenen Knoten ab.
| Name | Typ | Beschreibung |
|---|---|---|
| current | Objekt | Aktueller Knoten. |
| 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());
abcd1234
anotherScoped XMLDocument2 – getNode(String xPath)
Ruft den im xPath angegebenen Knoten ab.
| Name | Typ | Beschreibung |
|---|---|---|
| xPath | Zeichenfolge | xPath des abzurufenden Knotens. |
| 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");
Given node belongs to tag two
Given node might not belong to tag four. Error while checking: java.lang.NullPointerExceptionScoped XMLDocument2 – getNodeText(String xPath)
Ruft alle untergeordneten Textknoten aus dem Knoten ab, auf den im angegebenen XPath verwiesen wird.
| Name | Typ | Beschreibung |
|---|---|---|
| xPath | Zeichenfolge | XPath des abzurufenden Texts. |
| 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.
| Name | Typ | Beschreibung |
|---|---|---|
| xmlDoc | Zeichenfolge | Zu analysierendes Dokument. |
| 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.
| Name | Typ | Beschreibung |
|---|---|---|
| element | XMLNode | Elementknoten, der als aktueller Knoten festgelegt werden soll. |
| 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().
| Name | Typ | Beschreibung |
|---|---|---|
| enable | Boolean | Kennzeichnung, die angibt, ob CDATA-Knoten als CDATA- oder reguläre Textknoten behandelt werden sollen. Gültige Werte:
Standardwert: False |
| 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
anotherelement
anotherelementScoped 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.
| Name | Typ | Beschreibung |
|---|---|---|
| aware | Boolean | Bei „true“ verarbeitet das XMLDocument2-Objekt das Dokument mit XML-Namespaces. |
| Typ | Beschreibung |
|---|---|
| void |
Scoped XMLDocument2 – toString()
Gibt eine Zeichenfolge mit XML zurück.
| Name | Typ | Beschreibung |
|---|---|---|
| Keine |
| 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());
<?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>