2009-07-30 23 views
11

Tengo un DOMDocument PHP5 y trato de encontrar el nodo raíz (no el elemento raíz).PHP5: Buscar nodo raíz en DOMDocument

Ejemplo:

<test> 
    <element> 
     <bla1>x</bla1> 
     <bla2>x</bla2> 
    </element> 
    <element> 
     <bla1>y</bla1> 
     <bla2>y</bla2> 
    </element> 
    <element> 
     <bla1>z</bla1> 
     <bla2>z</bla2> 
    </element> 
</test> 

Quiero conseguir el DOMNode de "prueba" para que pueda llamar - por ejemplo - hasChildNodes. Puedo obtener el "documento Elemento", pero ese es un elemento DOME. Tal vez puedo ir desde allí?

$d = DOMDocument::loadXML($xml); 
// [... do some stuff here to find document's root node ...] 
if ($rootnode->hasChildNodes()) echo 'yayy!' 

¿Quién puede llenar el vacío? Parece que estoy ciego.

(Obviamente, no solo es necesario que Children's Call llame, así que NO, no ayuda encontrar otro método para averiguar si el documento contiene cosas. Eso es solo por mi simple ejemplo. Necesito un DOMNode al final .)

+0

De acuerdo, el problema parece ser la confusión total entre "DOMDocument" y "DomDocument" entre PHP5 y PHP4 y la documentación extraña de la misma. Creo que lo tengo arreglado ahora. Gracias a todos. – BlaM

Respuesta

5

De acuerdo con la documentación de PHP DOMElement is a subclass of DOMNode, por lo que debe heredar el -method hasChildNodes().

+0

Hmmm, está bien, eso es cierto ... Y si no envío mi -> documentElement a una función, todo parece funcionar correctamente ... La llamada a la función pierde algo en su camino ... Ahora a encontrar eso ... – BlaM

12

DOM Model- El W3C ha desglosado el DOM en una estructura en árbol de nodos de distintos tipos. La interfaz Node es la interfaz base para todos los elementos. Todos los objetos que implementan esta interfaz exponen métodos para tratar con niños.

$dom=new DomDocument; 
$dom->Load("file.xml"); 
$root=$dom->documentElement; // Root node 
+0

Debe marcarse como solución. – kaiser

55

DOMElement extends DOMNode.

Usted Obtiene la raíz DOMElement por $ d-> documentElement.

+12

¡Esta debería ser la respuesta marcada! –

+2

aquí está la documentación de esta propiedad http://www.php.net/manual/en/class.domdocument.php#domdocument.props.documentelement – gawpertron

+0

Voy a salvar a alguien un clic. La documentación anterior dice: 'Este es un atributo de conveniencia que permite el acceso directo al nodo hijo que es el elemento de documento del documento. – Ben

0

antes de PHP 5.1.3 este tipo ha lamido

https://macfoo.wordpress.com/2009/06/03/getting-the-root-node-from-an-xml-string

/** 
* function getXMLRootNode 
* @param string An xml string 
* @return string Return XML root node name 
*/ 

function getXMLRootNode($xmlstr) 
{ 
// Create DOM model 
$doc = new DOMDocument(); 

// Load the XML string 
if(!$doc->loadXML($xmlstr)) 
{ 
throw new Exception('Unable to parse XML string'); 
} 

// Find the root tag name 
$root = $doc->documentElement; 

if(!isset($root)) 
{ 
throw new Exception('Unable to find XML root node'); 
} 

if(!isset($root->nodeName)) 
{ 
throw new Exception('Unable to find XML root node name'); 
} 

return $root->nodeName; 
} 

Cruz Publicado a las preguntas de manera que golpeo mientras trata de encontrar la manera de hacer esto pre 5.1.3

Cuestiones relacionadas