2011-11-06 20 views
25

Duplicar posible:
How to extract a node attribute from XML using PHP's DOM ParserXPath valor del atributo ponerse en PHP

¿Cómo se extrae un valor de etiqueta HTML?

HTML:

<input type="hidden" name="text1" id="text1" value="need to get this"> 

PHP:

$homepage = file_get_contents('http://www.example.com'); 
$doc = new DOMDocument; 
$doc->preserveWhiteSpace = false; 
@$doc->loadHTML($homepage); 
$xpath = new DOMXpath($doc); 
$filtered = $xpath->query("//input[@name='text1']"); 

¿Cómo llego value ser "necesidad de conseguir este"?

Actualización:

Yo tengo trabajo y espero que pueda ayudar a otros también. Después de código anterior me dieron el valor por:

echo $filtered->item(0)->getAttribute('value'); 
+0

que tendrá que bucle sobre sus elementos filtrados '' $ filtered' a través de foreach ($ $ filtrada como elemento) {...} 'y comprobar los valores de nodo/atributos de sí mismo. – Smamatti

+5

Una opción es el método menos utilizado 'evaluate()', que devolverá el texto o una cadena vacía: '$ xpath-> evaluate ('string (// input [@ name =" text1 "]/@ value) '); ' – salathe

+4

Esto no es realmente un duplicado _exact_ de la otra pregunta. Esta es realmente una solución xpath de entorno cruzado, la otra es específica de php. –

Respuesta

34

XPath puede hacer el trabajo de conseguir el atributo de valor con $xpath->query("//input[@name='text1']/@value");. Luego puede iterar sobre la lista de nodos de atributos y acceder a la propiedad $value de cada nodo de atributo.

+2

solo closevote por favor. es un duplicado – Gordon

7

No estoy familiarizado con la sintaxis de PHP para esto, pero para seleccionar el valor del atributo que lo haría utilice el siguiente xpath:

//input[@name='text1']/@value 

Sin embargo, xpath no devuelve cadenas, devuelve nodos. Desea que el value del nodo, por lo que si PHP sigue la convención, que el código sería:

$xpath->query("//input[@name='text1']/@value")->value; 

con fines de aprendizaje, tenga en cuenta que compruebe siempre la propiedad value. Así que si quería el nombre del mismo elemento, que tendría que utilizar:

$xpath->query("//input[@name]/@name")->value; 

Se le apetezca para asegurarse de que la consulta devuelve un valor no nulo antes de consultar la propiedad value también.

+0

No funciona. error 'Propiedad no definida: DOMNodeList :: $ value' –

+1

esto funciona para mí: $ res = $ xpath-> query (" // entrada [@name]/@ nombre "); echo $ res-> item (0) -> nodeValue; – TomoMiha

+0

La forma más simple es usar 'evaluate', ver https://stackoverflow.com/a/45010743/287948 –

Cuestiones relacionadas