2010-10-22 25 views

Respuesta

12

Usando simplexml:

$xml = new SimpleXMLElement($xmlstr); 
echo $xml->file['path']."\n"; 

Salida:

http://www.thesite.com/download/eysjkss.zip 
+4

Solo ten cuidado. El valor de $ xml-> file ['path'] no es una cadena. Es una instancia de SimpleXMLElement. – mellowsoon

+2

De hecho. Puede causar problemas al comparar el valor con otra cadena, pero puede convertir este valor en una cadena de antemano '(cadena) $ xml-> archivo ['ruta']' –

+0

gracias muchachos, exactamente lo que estaba buscando –

-1

puede utilizar PHP simple HTML DOM analizador , esta es una biblioteca php.http: //simplehtmldom.sourceforge.net/

+0

¿Por qué introducir una biblioteca de terceros cuando las funciones incorporadas son más que adecuadas para esta tarea? – Phil

+0

Es como jquery, muy conveniente – Sam

+1

Alternativas de terceros sugeridas a [SimpleHtmlDom] (http://simplehtmldom.sourceforge.net/) que realmente usan [DOM] (http://php.net/manual/en/book. dom.php) en lugar de Análisis de cadena: [phpQuery] (http://code.google.com/p/phpquery/), [Zend_Dom] (http://framework.zend.com/manual/en/zend.dom .html), [QueryPath] (http://querypath.org/) y [FluentDom] (http://www.fluentdom.org). – Gordon

10

hacerlo con DOM haces

$dom = new DOMDocument; 
$dom->load('file.xml'); 
foreach($dom->getElementsByTagName('file') as $file) { 
    echo $file->getAttribute('path'); 
} 

También puede hacerlo con XPath:

$dom = new DOMDocument; 
$dom->load('file.xml'); 
$xPath = new DOMXPath($dom); 
foreach($xPath->evaluate('/files/file/@path') as $path) { 
    echo $path->nodeValue; 
} 

o como un valor de cadena directa:

$dom = new DOMDocument; 
$dom->load('file.xml'); 
$xPath = new DOMXPath($dom); 
echo $xPath->evaluate('string(/files/file/@path)'); 

se puede recuperar individuo nodos también atravesando el DOM manualmente

$dom = new DOMDocument; 
$dom->preserveWhiteSpace = FALSE; 
$dom->load('file.xml'); 
echo $dom->documentElement->firstChild->getAttribute('path'); 

Marcando este CW, porque esto ha sido respondido varias veces (solo con elementos diferentes), incluyéndome a mí, pero soy demasiado flojo para encontrar el duplicado.

Cuestiones relacionadas