2010-11-10 6 views
7

¿Hay alguna forma de extraer el "innerHTML" de un elemento SimpleXMLElement?Obtener el contenido XML de un elemento SimpleXMLElement

Por ejemplo ¿cómo puedo obtener '<div><h1>Hello World</h1></div>' a cabo del siguiente código XML utilizando SimpleXMLElement:

<xml> 
    <body1> 
    <div><h1>Hello World</h1></div> 
    </body1> 
    <body2> 
    <div><h2>Goodby Moon</h2></div> 
    </body2> 
</xml> 

leí la documentación y todo lo que ocurrió fue $xml->body1->asXML();. Es casi la solución correcta, sino que también añade la etiqueta raíz:

<body1> 
    <div><h1>Hello World</h1></div> 
</body1> 

¿Es posible omitir las etiquetas cuerpo1 rodean?


Editar:

El XML también podría tener este aspecto:

<xml> 
    <body1> 
    <div><h1>Hello World</h1></div> 
    <div><h1>Hello Moon</h1></div> 
    Some Text 
    </body1> 
    <body2> 
    <div><h2>Goodby Moon</h2></div> 
    </body2> 
</xml> 

Como en: http://codepad.org/8ZuRYZOW

Respuesta

6

Si está seguro de que es un div que estás buscando:

$xml->body1[0]->div->asXML();

demás

$xml->body1[0]->children()->asXML();

http://codepad.org/QUytim28 demás http://codepad.org/hDt28BL6

+0

(+1) Gracias por su código. Sin embargo, falla tan pronto como hay más de un elemento secundario. http://codepad.org/EHepjsZg – jantimon

+0

Esa es la razón por la que necesita dar más detalles en su pregunta;) Aquí está la solución http://codepad.org/BCxSzP2m – Shikiryu

+0

¡Gracias de nuevo! Desafortunadamente todavía no está funcionando. Se me ocurrió la misma idea, pero omite el texto simple. (Ver mi pregunta editada) – jantimon

0

Es posible que desee el children method o si desea utilizar $xml->body1[ 0 ]->asXML(); (acceso a matriz)

+0

¿Hay alguna diferencia entre '$ xml-> cuerpo1 [0] -> asXML(); 'y' $ xml-> body1-> asXML(); '? – jantimon

+1

@Ghommey: La única diferencia aparece si hay más de 1 '' en su xml – Shikiryu

Cuestiones relacionadas