Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - jdomgo3

#1
Hola a todos,
llevo un par de días probando varias cosas pero no lo consigo, el caso es que hay información en la web sobre cómo parsear xml cuando este tiene dos puntos en los namespaces pero mi problema va un poco mas allá, este es un fragmento del xml (en realidad es un XMI, no un XML) que quiero parsear:

Código (xml) [Seleccionar]

<?xml version="1.0" encoding="UTF-8"?>
<com.ibm.ejs.models.base.bindings.webappbnd:WebAppBinding xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI"
xmlns:com.ibm.ejs.models.base.bindings.webappbnd="webappbnd.xmi" xmi:id="WebAppBinding_1267660235297" virtualHostName="ABCD_01">
  <webapp href="WEB-INF/web.xml#WebApp_1267500236267"/>
</com.ibm.ejs.models.base.bindings.webappbnd:WebAppBinding>


Necesito quedarme con el item virtualHostName que pertenece al nodo com.ibm.ejs.models.base.bindings.webappbnd:WebAppBinding y este nombre tiene puntos ( . ) y dos puntos ( : ), ¿alguna idea?

Esto es lo último que he probado, sin éxito:

Código (php) [Seleccionar]

$loadIbmWebBnd = simplexml_load_file(archivo.xmi);
foreach($loadIbmWebBnd->com.ibm.ejs.models.base.bindings.webappbnd:WebAppBinding as $vH) {
echo $vH[virtualHostName];
}



Un saludo y muchas gracias de antemano.
#2
Saludos, llevo un rato buscando la manera de hacer una búsqueda de una cadena con caracteres especiales, como por ejemplo, corchetes ([]) y dos puntos(:) en una tabla. Concretamente necesito buscar la siguiente cadena:

Código (txt) [Seleccionar]
[cadena1:1234abdc]

He de decir que la parte "1234abcd" puede variar, es alfanumérica y rándom, en cambio "cadena1" es siempre igual. Por ejemplo:

Código (txt) [Seleccionar]
[cadena1:98u34r7y]

La query que estoy intentando es:

Código (SQL) [Seleccionar]
SELECT * FROM `tabla` WHERE columna REGEXP '\\[cadena1:*\\]';

Pero no me funciona. La segunda parte de lo que necesito hacer es sustituir cualquier coincidencia de [cadena1:*] por [cadena2], así, solo "[cadena2]", sin dos puntos ni nada mas, entre corchetes.

¿Cómo podría hacer esto?



Un saludo y gracias de antemano por la ayuda.
#3
Saludos a todos.

Estoy usando por primera vez la librería libxml y la verdad, estoy bastante perdido, he visto que hay muchos ejemplos pero no hay una explicación "decente" sobre el uso de la librería, o al menos no llego a comprender cómo se utiliza con cierta lógica. Tengo el siguiente archivo:

Código (XML) [Seleccionar]
<?xml version="1.0" encoding="UTF-8"?>
<serverindex:ServerIndex xmi:version="2.0" xmi:id="ServerIndex_1" hostName="localhost.localdomain">
  <serverEntries xmi:id="ServerEntry_1385929332571" serverDisplayName="nodeagent" serverName="nodeagent" serverType="NODE_AGENT">
    <specialEndpoints xmi:id="NamedEndPoint_1385929332578" endPointName="BOOTSTRAP_ADDRESS">
      <endPoint xmi:id="EndPoint_1385929332571" host="localhost.localdomain" port="2809"/>
    </specialEndpoints>
  </serverEntries>
  <serverEntries xmi:id="ServerEntry_1385932589812" serverName="LTEST003_MULT_T03_10" serverType="APPLICATION_SERVER">
    <deployedApplications>commsvc.ear/deployments/commsvc</deployedApplications>
    <deployedApplications>ibmasyncrsp.ear/deployments/ibmasyncrsp</deployedApplications>
    <specialEndpoints xmi:id="NamedEndPoint_1385932589812" endPointName="BOOTSTRAP_ADDRESS">
      <endPoint xmi:id="EndPoint_1385932589812" host="localhost.localdomain" port="48012"/>
    </specialEndpoints>
  </serverEntries>
  <serverEntries xmi:id="ServerEntry_1385932595602" serverName="LTEST003_MULT_T03_20" serverType="APPLICATION_SERVER">
    <deployedApplications>commsvc.ear/deployments/commsvc</deployedApplications>
    <deployedApplications>ibmasyncrsp.ear/deployments/ibmasyncrsp</deployedApplications>
    <specialEndpoints xmi:id="NamedEndPoint_1385932595602" endPointName="BOOTSTRAP_ADDRESS">
      <endPoint xmi:id="EndPoint_1385932595602" host="localhost.localdomain" port="48030"/>
    </specialEndpoints>
    <specialEndpoints xmi:id="NamedEndPoint_1385932595603" endPointName="SOAP_CONNECTOR_ADDRESS">
      <endPoint xmi:id="EndPoint_1385932595603" host="localhost.localdomain" port="48031"/>
    </specialEndpoints>
  </serverEntries>
</serverindex:ServerIndex>


Es una versión muy reducida del original, lo he recortado por que no tiene sentido que os ponga un archivo de 2000 líneas aquí. El caso es que he compilado el siguiente código para que me saque el nombre del nodo de cada uno de los nodos desde arriaba hasta abajo:

#include <stdio.h>
#include <libxml/parser.h>
#include <libxml/tree.h>

static void print_element_names(xmlNode *a_node)
{
xmlNode *cur_node = NULL;
for (cur_node = a_node; cur_node; cur_node = cur_node->next) {
if (cur_node->type == XML_ELEMENT_NODE) {
printf("%s\n", cur_node->name);
}
print_element_names(cur_node->children);
}
}

int main()
{
xmlDoc *doc = NULL;
xmlNode *root_element = NULL;
const char *Filename = "docs/archivo.xml";
doc = xmlReadFile(Filename, NULL, 0);
if (doc == NULL)
{
printf("ERROR: No se puede parsear el archivo %s\n", Filename);
} else {
root_element = xmlDocGetRootElement(doc);
print_element_names(root_element);
xmlFreeDoc(doc);;
}
xmlCleanupParser();
return (0);
}


Y funcionar funciona, lo que saca es una lista con los nombres de cada nodo:

Código (TXT) [Seleccionar]
ServerIndex
serverEntries
specialEndpoints
endPoint
serverEntries
deployedApplications
deployedApplications
specialEndpoints
endPoint
serverEntries
deployedApplications
deployedApplications
specialEndpoints
endPoint
specialEndpoints
endPoint


Me gustaría aprender a usar bien esta librería para poder imprimir a mi antojo no solo los nombres de ls nodos, si no imprimir solo los que me interesen en función de determinadas características como el valor de alguna propiedad del nodo como "serverType" por ejemplo. He probado con comparación de cadenas mediante strcmp de la librería string.h, pero no se muy bien el formato o el tratamiento de formatos que tiene libxml, ya que no me funciona con las pruebas que he realizado.

Me gustaría saber si hay alguien que tiene experiencia con libxml, y en caso de haber alguien si estaría dispuesto a explicarme algunas dudas sobre cómo hacer algunos parseos.

Un saludo y gracias de antemano.