xml — n_pbt_xml #
← Referencia de componentes · Índice de la guía
Escribir un XML elemento por elemento — aperturas, atributos, texto, cierres — con el escapado hecho por usted, y luego leer uno con XPath real:
of_load,of_get_value,of_get_attr,of_count. PowerBuilder 10 no tiene analizador XML; este se apoya en DOMParser y document.evaluate del motor WebView2, llamados de forma sincrónica.
▶ Verlo en vivo — Aplicación de demostración, mosaico XML: los resultados, el código que los produce y esta página, lado a lado.
En resumen #
El lado de construcción es PowerScript puro (armar una cadena no necesita motor). El lado de lectura abre una página oculta en la primera consulta. El XPath es la versión 1.0, tal como lo evalúa el navegador.
Inicio rápido #
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>
Propiedades #
| Miembro | Función |
|---|---|
string is_last_error | Por qué la última lectura devolvió vacío o un código negativo: documento mal formado, XPath sin coincidencia, límite demo. Vacío tras un éxito |
Construir un documento #
| Miembro | Función |
|---|---|
of_start_element (string as_name) | Abre un elemento (los elementos se anidan: una etiqueta abierta se cierra antes) |
of_element_attr (string as_name, string as_value) | Agrega un atributo al elemento abierto, valor escapado (antes de hijo o texto) |
of_element_text (string as_text) | El contenido de texto del elemento actual, escapado |
of_end_element ( ) | Cierra el elemento actual (vacío, se auto-cierra <name/>) |
of_leaf (string as_name, string as_text) | Un elemento hoja en una llamada — <name>texto</name>, escapado |
of_clear ( ) → long | Vacía el builder para otro documento. Devuelve 0 |
of_xml ( ) → string | El documento tal cual: lo que construyó o cargó (of_load), tras cualquier cambio — la salida única, para enviar, almacenar o reescribir. Un documento construido no necesita página (todo elemento abierto se cierra) ; uno cargado lo serializa el motor. of_pretty da la forma indentada |
Leer un documento (XPath) #
| Miembro | Función |
|---|---|
of_load (string as_xml) → long | Carga un texto XML (analizado por el DOMParser del motor). Devuelve 0 si bien formado, -5 si vacío, -4 si XML inválido, -2 si la página oculta falla |
of_is_valid ( ) → boolean | Verdadero cuando el último of_load tuvo éxito y hay un documento cargado |
of_exists (string as_xpath) → boolean | Verdadero cuando el XPath coincide con al menos un nodo |
of_get_value (string as_xpath) → string | El contenido de texto del PRIMER nodo coincidente. Vacío si ninguno |
of_get_attr (string as_xpath, string as_name) → string | El valor del atributo as_name del primer nodo coincidente. Vacío si ausente |
of_count (string as_xpath) → long | Cuántos nodos coincide el XPath. 0 si ninguno (un recuento XPath nunca es negativo) |
of_name (string as_xpath) → string | El nombre de etiqueta del primer nodo coincidente. Vacío si ninguno |
of_pretty ( ) → string | El documento tal cual — construido o cargado, lo que devuelve of_xml — re-indentado para leer. Vacío si no hay nada, o si un documento construido no está bien formado |
Varios nodos, y el documento #
| Miembro | Función |
|---|---|
of_get_values (string as_xpath, ref string as_values[]) → long | El contenido de texto de CADA nodo coincidente, en as_values; devuelve el recuento. Donde of_get_value solo devuelve el primero |
of_get_attrs (string as_xpath, string as_name, ref string as_values[]) → long | El valor del atributo as_name en CADA nodo coincidente (el id de cada fila); devuelve el recuento |
of_get_attr_names (string as_xpath, ref string as_names[]) → long | Los nombres de todos los atributos del primer nodo coincidente (enumeración); devuelve el recuento |
Modificar un documento #
El lado de escritura cambia el árbol cargado en el sitio; of_xml devuelve el resultado. Cada una apunta al PRIMER nodo coincidente (salvo of_remove, que los toma todos), devuelve 0 al tener éxito, -4 si nada coincide, -5 con un argumento vacío.
| Miembro | Función |
|---|---|
of_set_value (string as_xpath, string as_text) → long | Fija el texto del primer nodo coincidente (sus hijos se reemplazan) |
of_set_attr (string as_xpath, string as_name, string as_value) → long | Fija (o agrega) un atributo en el primer nodo coincidente |
of_remove_attr (string as_xpath, string as_name) → long | Quita un atributo del primer nodo coincidente |
of_add_child (string as_xpath, string as_tag, string as_text) → long | Agrega un elemento hijo <as_tag>as_text</as_tag> bajo el primer nodo coincidente (el hijo hereda el espacio de nombres del padre) |
of_add_xml (string as_xpath, string as_fragment) → long | Injerta un fragmento XML ya formado (uno o varios elementos hermanos) bajo el primer nodo coincidente — lo que of_add_child no puede hacer, tomando solo una etiqueta y un texto. El fragmento debe estar bien formado y declarar el espacio de nombres que usa |
of_remove (string as_xpath) → long | Quita CADA nodo coincidente (una fila, una rama obsoleta). Devuelve cuántos se quitaron (nunca negativo) |
Espacios de nombres y XSLT #
Un XPath con prefijo (SOAP, una API empresarial) no coincide con nada sin un resolvedor: of_register_namespace liga el prefijo a su URI, of_clear_namespaces los olvida todos. of_transform aplica una hoja XSLT — el motor tiene XSLTProcessor, PowerBuilder 10 no tiene nada parecido.
| Miembro | Función |
|---|---|
of_register_namespace (string as_prefix, string as_uri) → long | Liga un prefijo al URI de su espacio de nombres, para que un XPath con prefijo (/s:Envelope) se resuelva. Devuelve 0, o -5 con un prefijo vacío. Las ligaduras duran hasta of_clear_namespaces o of_reset |
of_clear_namespaces ( ) → long | Olvida todos los prefijos registrados: un XPath con prefijo ya no coincide con nada hasta que se ligue un prefijo. Devuelve 0 |
of_transform (string as_xslt) → string | Transforma el documento cargado con una hoja XSLT y devuelve el resultado como texto. Vacío si no hay nada cargado o si la hoja no es XML válido |
// 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()
La página oculta #
| Miembro | Función |
|---|---|
of_open ( ) → long | Crea la página oculta (lado lectura). Opcional — la primera lectura lo hace. Devuelve el handle (> 0) o un código negativo |
of_is_open ( ) → boolean | Verdadero en cuanto existe la página oculta |
of_close ( ) | Libera la página oculta. Construir sigue sin ella. Hecho por usted al destruir |
of_reset ( ) | Vuelta a los valores por defecto: el builder vaciado, el estado de lectura borrado |
Alcance. El XML se lee mediante el motor (DOMParser, XPath):
n_pbt_xmlabre una página oculta en la primera lectura, a diferencia de json, que analiza en PowerScript puro. Para mostrar un XML como árbol plegable, vea xmltree.