2008-10-23 22 views
18

Aquí está el código XML estoy trabajando con:consulta XPath con PHP

<inventory> 
    <drink> 
     <lemonade supplier="mother" id="1"> 
      <price>$2.50</price> 
      <amount>20</amount> 
     </lemonade> 
     <lemonade supplier="mike" id="4"> 
      <price>$3.00</price> 
      <amount>20</amount> 
     </lemonade> 
     <pop supplier="store" id="2"> 
      <price>$1.50</price> 
      <amount>10</amount> 
     </pop> 
    </drink> 
</inventory> 

Entonces escribí un código simple para practicar el trabajo con XPath:

<?php 
    $xmldoc = new DOMDocument(); 
    $xmldoc->load('sample.xml'); 

    $xpathvar = new Domxpath($xmldoc); 

    $queryResult = $xpathvar->query('//lemonade/price'); 
    foreach($queryResult as $result) { 
     echo $result->textContent; 
    } 
?> 

Ese código está funcionando bien, la salida todos los valores del precio de la limonada como se esperaba Ahora cuando cambio la cadena de consulta para seleccionar sólo los elementos con un atributo se establece en un valor determinado, como

// limonada [proveedor = "madre"]/precio

o

// limonada [id = "1"]/precio

no va a funcionar, no hay salida en absoluto. ¿Qué estoy haciendo mal?

Respuesta

32

Prueba esto:

//lemonade[@id="1"]/price 

o

//lemonade[@supplier="mother"]/price 

Sin la "@" busca elementos secundarios con ese nombre en lugar de atributos.

6

tiene que usar el signo @ para indicar el atributo dentro del predicado como: //lemonade[@supplier="mother"]/price, eso es todo.

7

Esto solo está relacionado de forma tangencial, pero cuando utiliza XPath en un documento del que conoce la estructura, no utilice y utilice "// algún-nombre-nombre". Es muy bueno para un ejemplo rápido, pero cuando aciertas con un gran archivo xml con esa consulta, particularmente si va seguido de algo complejo, rápidamente encontrarás problemas de rendimiento.

inventario/bebida/limonada [@ supplier = "mother"]/precio

Cuestiones relacionadas