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 & Co</customer></order>
Eigenschaften #
| Element | Rolle |
|---|---|
string is_last_error | Warum das letzte Lesen leer oder einen negativen Code lieferte: fehlerhaftes Dokument, XPath ohne Treffer, Demo-Grenze. Leer nach Erfolg |
Ein Dokument bauen #
| Element | Rolle |
|---|---|
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 ( ) → long | Leert den Builder für ein anderes Dokument. Liefert 0 |
of_xml ( ) → string | Das 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) #
| Element | Rolle |
|---|---|
of_load (string as_xml) → long | Lä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 ( ) → boolean | Wahr, wenn das letzte of_load erfolgreich war und ein Dokument gehalten wird |
of_exists (string as_xpath) → boolean | Wahr, wenn der XPath mindestens einen Knoten trifft |
of_get_value (string as_xpath) → string | Der Textinhalt des ERSTEN passenden Knotens. Leer, wenn keiner |
of_get_attr (string as_xpath, string as_name) → string | Der Wert des Attributs as_name am ersten passenden Knoten. Leer, wenn abwesend |
of_count (string as_xpath) → long | Wie viele Knoten der XPath trifft. 0, wenn keiner (ein XPath-Zählwert ist nie negativ) |
of_name (string as_xpath) → string | Der Tag-Name des ersten passenden Knotens. Leer, wenn keiner |
of_pretty ( ) → string | Das 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 #
| Element | Rolle |
|---|---|
of_get_values (string as_xpath, ref string as_values[]) → long | Der 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[]) → long | Der 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[]) → long | Die 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.
| Element | Rolle |
|---|---|
of_set_value (string as_xpath, string as_text) → long | Setzt den Text des ersten passenden Knotens (seine Kinder werden ersetzt) |
of_set_attr (string as_xpath, string as_name, string as_value) → long | Setzt (oder fügt) ein Attribut am ersten passenden Knoten |
of_remove_attr (string as_xpath, string as_name) → long | Entfernt ein Attribut vom ersten passenden Knoten |
of_add_child (string as_xpath, string as_tag, string as_text) → long | Fü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) → long | Pfropft 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) → long | Entfernt 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.
| Element | Rolle |
|---|---|
of_register_namespace (string as_prefix, string as_uri) → long | Bindet 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 ( ) → long | Vergisst alle registrierten Präfixe: ein präfigierter XPath trifft wieder nichts, bis ein Präfix gebunden wird. Liefert 0 |
of_transform (string as_xslt) → string | Transformiert 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 #
| Element | Rolle |
|---|---|
of_open ( ) → long | Erzeugt die verborgene Seite (Leseseite). Optional — das erste Lesen tut es. Liefert das Handle (> 0) oder einen negativen Code |
of_is_open ( ) → boolean | Wahr, 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.