2011-04-08 21 views
7

decir que tengo esta siguiente estructura XML:SimpleXML obtener el valor de nodo

<?xml version="1.0" encoding="UTF-8"?> 
<main> 
    <parent> 
     <child1>some value</child1> 
     <child2>another value</child2> 
    </parent> 
</main> 

hice una variable del XML y ahora quiero obtener los valores de child1, así que uso SimpleXML:

$xml = new SimpleXMLElement($xml); 
$this->xmlcode = (string) $xml->main->parent->child1; 

Pero recibo este mensaje: Aviso: tratando de obtener la propiedad de no objeto en /x.php en línea x

También lo probé con $ xml-> parent-> child1, pero no tuvo éxito.

Cualquiera ??

+7

* suspiro * Este debe ser uno de los errores más frecuentes de la historia. Cuando carga un documento XML en SimpleXmlElement, el nodo raíz es SimpleXmlElement, p. Ej. '$ xml =

'. – Gordon

+1

Gracias por la explicación Gordon. – priktop

Respuesta

22
$xml = new SimpleXMLElement($xml); 
$this->xmlcode = (string) $xml->parent[0]->child1; 
+0

Gracias, lo tengo :) – priktop

+1

Problema resuelto para mí agregando el tipo (cadena) de (float) por ejemplo. – JelleP

2

Un buen ejemplo del uso de XPath con PHP para la SimpleXMLElement se puede encontrar aquí http://www.php.net/manual/en/class.simplexmlelement.php#95229

// Find the topmost element of the domDocument 
$xpath = new DOMXPath($xml); 
$child1 = $xpath->evaluate('/main/parent/child1')->item(0); 
+3

SimpleXml puede hacer consultas XPath. No hay necesidad de convertir a DOM para hacerlo. La única ventaja de usar evaluate es cuando obtiene resultados escritos, lo que su ejemplo claramente no hace. – Gordon

Cuestiones relacionadas