Foros del Web » Programando para Internet » PHP »

Busqueda contenido Atributo XML con DOMXPath

Estas en el tema de Busqueda contenido Atributo XML con DOMXPath en el foro de PHP en Foros del Web. Muy buenas a tod@s, Me estoy volviendo loco con un asunto así que espero puedan ayudarme ;) Estoy intentando hacer una busqueda dentro de un ...
  #1 (permalink)  
Antiguo 24/05/2011, 04:00
 
Fecha de Ingreso: enero-2011
Ubicación: Bilbao
Mensajes: 18
Antigüedad: 13 años, 3 meses
Puntos: 0
Busqueda contenido Atributo XML con DOMXPath

Muy buenas a tod@s,

Me estoy volviendo loco con un asunto así que espero puedan ayudarme ;)

Estoy intentando hacer una busqueda dentro de un XML mediante XPath. Exactamente quiero conseguir los nodos que tengan un valor concreto dentro de un atributo concreto. Un ejemplo de xml:

Código:
<Node1>
   <Node2 name="A, 1" />
   <Node2 name="B, 1" />
   <Node2 name="A, 2" />
</Node1>
Es un ejemplo sencillo, el xml con el que estoy trabajando es más complicado y no tiene un formato concreto.

Sé que haciendo la busqueda '//*[@name]' me guarda todos los nodos que tengan el atributo name, pero mi pregunta es:
¿Se puede en un único paso, conseguir los nodos que tengan el atributo name, y que este empiece por "A"?

Realmente me vendría muy bien saberlo porque me reduciría considerablemente el tamaño del DOMNodeList y necesito reducir el tiempo de ejecución.

Muchísimas gracias de antemano!
  #2 (permalink)  
Antiguo 24/05/2011, 04:37
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Busqueda contenido Atributo XML con DOMXPath

Puedes utilizar starts-with, la expresión seria algo así, //*[starts-with(@name, 'A')]

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 24/05/2011, 04:53
 
Fecha de Ingreso: enero-2011
Ubicación: Bilbao
Mensajes: 18
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Busqueda contenido Atributo XML con DOMXPath

Muchas gracias masterpuppet!

La verdad es que eso me soluciona el problema :)

Sabrías que se podría hacer en caso consultar un valor del interior del atributo en vez del primero?

Por ejemplo:

Código:
<node name="A, 2, 100, 5" />
<node name="B, 1, 100, 2" />
<node name="A, 1, 50, 1" />
En caso de necesitar los nodos que el tercer dato de "name" sea 100, se podría hacer en un solo paso?

Muchas gracias!
  #4 (permalink)  
Antiguo 24/05/2011, 05:13
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Busqueda contenido Atributo XML con DOMXPath

Lo mas cercano es contains, algo así: //*[contains(@name, '100')], si no recuerdo mal PHP no soporta XPath 2.0, el cual tiene matches que te permite tirar expresiones regulares.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #5 (permalink)  
Antiguo 24/05/2011, 07:13
 
Fecha de Ingreso: enero-2011
Ubicación: Bilbao
Mensajes: 18
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Busqueda contenido Atributo XML con DOMXPath

Buenas,

Creo haber leído por ahí que a partir de PHP 5 sí que soporta XPath 2.0.

Es posible que sea con la función registerPhpFunctions(), la cual te permite poder utilizar dentro de la consulta, todas las funciones propias de php o incluso una función escrita por uno mismo.

Aún así no me ha quedado claro como usarlo, así que ya llegará el momento de meterse con ello ;)

Muchas gracias masterpuppet!
  #6 (permalink)  
Antiguo 24/05/2011, 07:28
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Busqueda contenido Atributo XML con DOMXPath

registerPhpFunctions te permite integrar funciones y podrías emular de alguna manera XPath 2.0, pero PHP no lo soporta de forma nativa, con XPath 2.0 podrias hacer algo asi:
//*[matches(@name, '/regex/')](no recuerdo bien la sintaxis).

Igual extender DOMXpath y por medio de registerPhpFunctions agregar funcionalidad seria lo mas elegante .

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)

Etiquetas: dom, xml, xpath, atributos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:24.