PBToolboxAI v3 ← Site

xml — n_pbt_xml #

← Komponentenreferenz · Inhalt des Handbuchs

XML Element für Element schreiben — Öffnen, Attribute, Text, Schließen — mit dem Escaping für Sie erledigt, dann eines zurücklesen mit echtem XPath: of_load, of_get_value, of_get_attr, of_count. PowerBuilder 10 hat keinen XML-Parser; dieser nutzt DOMParser und document.evaluate der WebView2-Engine, synchron aufgerufen.

▶ Live ansehen — Demoanwendung, Kachel XML: die Ergebnisse, der zugehörige Code und diese Seite nebeneinander.


Kurzüberblick #

Die Bau-Seite ist reines PowerScript (einen String zu bauen braucht keine Engine). Die Lese-Seite öffnet bei der ersten Abfrage eine verborgene Seite. Das XPath ist Version 1.0, wie der Browser es auswertet.

Schnellstart #

n_pbt_xml  lnv_xml

// Read : load, then query with XPath
lnv_xml.of_load('<order id="4152"><customer>Ada</customer></order>')
IF lnv_xml.of_is_valid() THEN
	MessageBox("Customer", lnv_xml.of_get_value("/order/customer"))   // Ada
	MessageBox("Id", lnv_xml.of_get_attr("/order", "id"))              // 4152
END IF

// Build : element by element, escaping done for you
lnv_xml.of_clear()
lnv_xml.of_start_element("order")
lnv_xml.of_element_attr("id", "4152")
lnv_xml.of_leaf("customer", "Ada & Co")
lnv_xml.of_end_element()
// lnv_xml.of_xml() -> <order id="4152"><customer>Ada &amp; Co</customer></order>

Eigenschaften #

ElementRolle
string is_last_errorWarum das letzte Lesen leer oder einen negativen Code lieferte: fehlerhaftes Dokument, XPath ohne Treffer, Demo-Grenze. Leer nach Erfolg

Ein Dokument bauen #

ElementRolle
of_start_element (string as_name)Öffnet ein Element (Elemente verschachteln: ein offenes Start-Tag wird zuerst geschlossen)
of_element_attr (string as_name, string as_value)Fügt dem offenen Element ein Attribut hinzu, Wert escaped (vor Kind oder Text)
of_element_text (string as_text)Der Textinhalt des aktuellen Elements, escaped
of_end_element ( )Schließt das aktuelle Element (leer, selbstschließend <name/>)
of_leaf (string as_name, string as_text)Ein Blatt-Element in einem Aufruf — <name>Text</name>, escaped
of_clear ( ) → longLeert den Builder für ein anderes Dokument. Liefert 0
of_xml ( ) → stringDas Dokument wie es ist: das, was Sie gebaut oder geladen (of_load) haben, nach jeder Änderung — die einzige Ausgabe, zum Senden, Speichern oder Zurückschreiben. Ein gebautes Dokument braucht keine Seite (offene Elemente werden geschlossen) ; ein geladenes wird von der Engine serialisiert. of_pretty ist die eingerückte Form

Ein Dokument lesen (XPath) #

ElementRolle
of_load (string as_xml) → longLädt einen XML-Text (vom DOMParser der Engine geparst). Liefert 0 bei wohlgeformt, -5 bei leer, -4 bei ungültigem XML, -2 wenn die verborgene Seite scheitert
of_is_valid ( ) → booleanWahr, wenn das letzte of_load erfolgreich war und ein Dokument gehalten wird
of_exists (string as_xpath) → booleanWahr, wenn der XPath mindestens einen Knoten trifft
of_get_value (string as_xpath) → stringDer Textinhalt des ERSTEN passenden Knotens. Leer, wenn keiner
of_get_attr (string as_xpath, string as_name) → stringDer Wert des Attributs as_name am ersten passenden Knoten. Leer, wenn abwesend
of_count (string as_xpath) → longWie viele Knoten der XPath trifft. 0, wenn keiner (ein XPath-Zählwert ist nie negativ)
of_name (string as_xpath) → stringDer Tag-Name des ersten passenden Knotens. Leer, wenn keiner
of_pretty ( ) → stringDas Dokument wie es ist — gebaut oder geladen, was of_xml liefert — zum Lesen neu eingerückt. Leer, wenn nichts da ist oder ein gebautes Dokument nicht wohlgeformt ist

Mehrere Knoten und das Dokument #

ElementRolle
of_get_values (string as_xpath, ref string as_values[]) → longDer Textinhalt JEDES passenden Knotens, in as_values; liefert die Anzahl. Wo of_get_value nur den ersten liefert
of_get_attrs (string as_xpath, string as_name, ref string as_values[]) → longDer Wert des Attributs as_name an JEDEM passenden Knoten (die id jeder Zeile); liefert die Anzahl
of_get_attr_names (string as_xpath, ref string as_names[]) → longDie Namen aller Attribute des ersten passenden Knotens (Aufzählung); liefert die Anzahl

Ein Dokument ändern #

Die Schreib-Seite ändert den geladenen Baum an Ort und Stelle; of_xml liefert das Ergebnis. Jede zielt auf den ERSTEN passenden Knoten (außer of_remove, das alle nimmt), liefert 0 bei Erfolg, -4 wenn nichts passte, -5 bei leerem Argument.

ElementRolle
of_set_value (string as_xpath, string as_text) → longSetzt den Text des ersten passenden Knotens (seine Kinder werden ersetzt)
of_set_attr (string as_xpath, string as_name, string as_value) → longSetzt (oder fügt) ein Attribut am ersten passenden Knoten
of_remove_attr (string as_xpath, string as_name) → longEntfernt ein Attribut vom ersten passenden Knoten
of_add_child (string as_xpath, string as_tag, string as_text) → longFügt ein Kind-Element <as_tag>as_text</as_tag> unter dem ersten passenden Knoten an (das Kind erbt den Namensraum des Elternteils)
of_add_xml (string as_xpath, string as_fragment) → longPfropft ein bereits geformtes XML-Fragment (ein oder mehrere Geschwisterelemente) unter den ersten passenden Knoten — was of_add_child nicht kann, da es nur ein Tag und Text nimmt. Das Fragment muss wohlgeformt sein und den verwendeten Namensraum deklarieren
of_remove (string as_xpath) → longEntfernt JEDEN passenden Knoten (eine Zeile, einen veralteten Zweig). Liefert, wie viele entfernt wurden (nie negativ)

Namensräume und XSLT #

Ein präfigierter XPath (SOAP, eine Unternehmens-API) trifft ohne Resolver nichts: of_register_namespace bindet das Präfix an seine URI, of_clear_namespaces vergisst alle. of_transform wendet ein XSLT-Stylesheet an — die Engine hat XSLTProcessor, PowerBuilder 10 nichts dergleichen.

ElementRolle
of_register_namespace (string as_prefix, string as_uri) → longBindet ein Präfix an seine Namensraum-URI, damit ein präfigierter XPath (/s:Envelope) aufgelöst wird. Liefert 0 oder -5 bei leerem Präfix. Bindungen gelten bis of_clear_namespaces oder of_reset
of_clear_namespaces ( ) → longVergisst alle registrierten Präfixe: ein präfigierter XPath trifft wieder nichts, bis ein Präfix gebunden wird. Liefert 0
of_transform (string as_xslt) → stringTransformiert das geladene Dokument mit einem XSLT-Stylesheet und liefert das Ergebnis als Text. Leer, wenn nichts geladen ist oder das Stylesheet kein gültiges XML ist
// A SOAP response : bind the prefix, then query it
lnv_xml.of_load(ls_soap)
lnv_xml.of_register_namespace("s", "http://schemas.xmlsoap.org/soap/envelope/")
ls_ok = lnv_xml.of_get_value("//s:Body/result/status")

// Mutate, then read the result back
lnv_xml.of_set_value("/order/customer", "Grace")
lnv_xml.of_add_child("/order", "total", "690.50")
// Graft a whole fragment at once (of_add_child adds only one tag)
lnv_xml.of_add_xml("/order", "<lines><line sku=\"1\">A</line><line sku=\"2\">B</line></lines>")
ls_out = lnv_xml.of_xml()

Die verborgene Seite #

ElementRolle
of_open ( ) → longErzeugt die verborgene Seite (Leseseite). Optional — das erste Lesen tut es. Liefert das Handle (> 0) oder einen negativen Code
of_is_open ( ) → booleanWahr, sobald die verborgene Seite existiert
of_close ( )Gibt die verborgene Seite frei. Bauen läuft ohne sie weiter. Bei Zerstörung erledigt
of_reset ( )Zurück zu den Standardwerten: der Builder geleert, der Lesezustand gelöscht

Umfang. XML wird über die Engine gelesen (DOMParser, XPath): n_pbt_xml öffnet beim ersten Lesen eine verborgene Seite, anders als json, das in reinem PowerScript parst. Um ein XML als aufklappbaren Baum zu zeigen, siehe xmltree.

← Komponentenreferenz · Inhalt des Handbuchs