2011-06-27 30 views
5

¿Cómo puedo obtener un texto desde dentro de un nodo usando xpath?Php y Xpath - cómo obtener texto desde dentro de un nodo

Por ahora lo estoy haciendo de esta manera:

$temp= $content->xpath('qwe/qwe'); 
$temp = each($temp[0]); 
return $temp['value']; 

Pero como se puede ver que es lejos de ser buena solución :(

en C# es tan fácil como

public string readXmlVar(string xpath) 
{ 
    XmlNode xmlNode = xml.SelectSingleNode(xpath); 
    return xmlNode.InnerText; 
} 
+1

Sólo proyectarlo como una cadena: 'retorno (string) $ temp;' – prodigitalson

+0

hm, que funciona :) ¿Por qué no escribió la respuesta adecuada? Te agradezco y seleccioné tu respuesta :) – NewProger

+0

php puede ser un lenguaje tan loco a veces ... nunca se puede saber qué hacer en algunos casos ... – NewProger

Respuesta

7

Para SimleXmlElement simplemente rodéelo como una cadena: return (string) $temp;. Para DomDocument use return $temp->nodeValue.

+2

Hay que tener cuidado, usando '$ temp-> nodeValue' para' DomDocument' devolverá el contenido de texto de todos los niños debajo del nodo dado (incluidos los hijos de niños). – Yoshi

6

Probar:

$dom = new DOMDocument; 
$dom->loadXML('<root> 
    <p>some text<br />some more text</p> 
</root>'); 

$xpath = new DOMXPath($dom); 
foreach ($xpath->query('/root/p/text()') as $textNode) { 
    echo $textNode->nodeValue; 
} 

$textNode será un DOMText.

+0

Usar foreach es aún peor ... – NewProger

+0

@Lurler ¿Por qué? Si quieres todo el contenido de texto, solo recoge los valores del nodo. Esto es simple dom crossing, ni siquiera es php específico. – Yoshi

+0

Porque crea una copia de la variable y luego la repite. Es completamente ineficaz. – NewProger

2
(string) current($xml->xpath("//group[@ref='HS_TYP']")) 

Espero que ayude

+0

Mucho mejor. Una solución simple y completa de una sola línea para una pregunta simple. – meustrus

1

Esto hará que todo el texto interno del elemento simple xml

dom_import_simplexml($xpath->query('//div[@class="h1"]')->textContent; 
Cuestiones relacionadas