recorrer nodos leer crear con cargar atributos acceder php html xml rss simplexml

php - nodos - Cómo analizar el contenido HTML de CDATA de XML utilizando SimpleXML?



recorrer nodos xml php (2)

Estoy tratando de mostrar el contenido de Xml en tablas, todo funciona perfectamente pero hay algo de contenido en la etiqueta que no quiero mostrar, solo quiero imagen pero no

Calendario de noviembre de 2012 a partir de 5.10 La prueba

como en xml,

<content:encoded><![CDATA[<p>November 2012 calendar from 5.10 The Test</p> <p><a class="shutterset_" href=''http://trance-gemini.com/wordpress/wp-content/gallery/calendars/laura-bertram-trance-gemini-145-1080.jpg'' title=''&lt;br&gt;November 2012 calendar from 5.10 The Test&lt;br&gt; &lt;a href=&quot;</a></p>]]> </content:encoded>

Quiero mostrar la imagen pero no

Calendario de noviembre de 2012 a partir de 5.10 La prueba

.

<?php // load SimpleXML $item = new SimpleXMLElement(''test1.xml'', null, true); echo <<<EOF <table border="1px"> <tr cl> </tr> EOF; foreach($item->channel->item as $boo) // loop through our books { echo <<<EOF <tr> <td rowspan="3">{$boo->children(''content'', true)->encoded}</td> <td>{$boo->title}</td> </tr> <tr> <td>{$boo->description}</td> </tr> <tr> <td>{boo->comments}</td> </tr> EOF; } echo ''</table>''; ?>


Una vez respondí pero no encuentro la respuesta por más tiempo.

Si echas un vistazo a la cadena (simplificado / embellecido):

<content:encoded><![CDATA[ <p>Lorem Ipsom</p> <p> <a href=''laura-bertram-trance-gemini-145-1080.jpg'' title=''&lt;br&gt;November 2012 calendar from 5.10 The Test&lt;br&gt; &lt;a href=&quot;</a> </p>]]> </content:encoded>

Puede ver que tiene HTML codificado dentro del valor de nodo del elemento <content:encoded> . Entonces primero necesita obtener el valor HTML, que ya hace:

$html = $boo->children(''content'', true)->encoded;

Luego necesita analizar el HTML dentro de $html . Con qué bibliotecas se puede hacer el análisis HTML con PHP se describe en:

  • Cómo analizar y procesar HTML / XML con PHP?

Si decide utilizar el DOMDocument más o menos recomendado para el trabajo, solo necesita obtener el valor del atributo de un elemento determinado:

  • PHP DOMDocument obtiene el atributo de la etiqueta

O para su biblioteca hermana SimpleXML que ya usa (así que esto es más recomendable, consulte también la siguiente sección):

  • ¿Cómo obtener un atributo con SimpleXML?

En el contexto de su pregunta aquí, el siguiente consejo:

Estás usando SimpleXML. DOMDocument es una biblioteca hermana, lo que significa que puede intercambiar entre los dos, por lo que no necesita aprender una biblioteca nueva completa.

Por ejemplo, puede usar solo la característica de análisis HTML de DOMDocument , pero importarla luego a SimpleXML . Esto es útil, porque SimpleXML no es compatible con el análisis HTML.

Eso funciona a través de simplexml_import_dom() .

Un ejemplo simplificado paso a paso:

// get the HTML string out of the feed: $htmlString = $boo->children(''content'', true)->encoded; // create DOMDocument for HTML parsing: $htmlParser = new DOMDocument(); // load the HTML: $htmlParser->loadHTML($htmlString); // import it into simplexml: $html = simplexml_import_dom($htmlParser);

Ahora puede usar $html como un nuevo SimpleXMLElement que representa el documento HTML. Como sus fragmentos HTML no tienen ninguna etiqueta <body> , de acuerdo con la especificación HTML, se colocan dentro de la etiqueta <body> . Esto le permitirá, por ejemplo, acceder al atributo href del primer <a> dentro del segundo elemento <p> en su ejemplo: #

// access the element you''re looking for: $href = $html->body->p[1]->a[''href''];

Aquí la vista completa desde arriba ( Demo en línea ):

// get the HTML string out of the feed: $htmlString = $boo->children(''content'', true)->encoded; // create DOMDocument for HTML parsing: $htmlParser = new DOMDocument(); // your HTML gives parser warnings, keep them internal: libxml_use_internal_errors(true); // load the HTML: $htmlParser->loadHTML($htmlString); // import it into simplexml: $html = simplexml_import_dom($htmlParser); // access the element you''re looking for: $href = $html->body->p[1]->a[''href'']; // output it echo $href, "/n";

Y lo que produce:

laura-bertram-trance-gemini-145-1080.jpg


tendrías que analizar la url de la imagen, por ejemplo, a través de preg_match y esta expresión regular ''(http://(?:[^'']*))''