simplexml_load_file savexml ejemplo domelement create convertir php xml dom tags

savexml - ¿Cómo se lee entre delimitadores en php DOM de un archivo XML?



savexml php (2)

Fácil en XSLT 2.0 / 3.0. Primero reorganice el XML en una estructura más sensible:

<xsl:template match="book"> <book> <xsl:for-each-group select="* except endpages" group-starting-with="page"> <page n="{@n}"> <xsl:copy-of select="current-group() except self::page"/> </page> </xsl:for-each-group> </book> </xsl:template>

Luego, para procesar una página seleccionada:

<xsl:param name="page-num"/> <xsl:template match="page[@n = $page-num]"> <xsl:apply-templates/> </xsl:template>

Puede ejecutar XSLT 2.0 / 3.0 desde PHP usando el procesador Saxon / C. No es necesario sumergirse en la manipulación DOM de bajo nivel.

Tengo algunos archivos XML y los tengo que leer y convertir en HTML.

El formato del XML es este:

<book pages="2"> <page n="1" /> <entry> ... </entry> <entry> ... </entry> <entry> ... </entry> <page n="2" /> <entry> ... </entry> <entry> ... </entry> <entry> ... </entry> <endpages /> </book>

¿Cómo puedo extraer una matriz de entradas solo de una sola página?

¡Gracias por adelantado!


Sugerí usar XPath para esto en mi comentario original , sin embargo, he estado jugando con algunas expresiones XPath para esto usando una combinación de following-sibling preceding-sibling pero no puedo hacer que funcione correctamente con esta estructura XML .

Una forma un poco chistosa de hacer esto es simplemente obtener todo después de un número de página dado, y detenerse cuando encuentre el siguiente elemento <page /> o <endpages /> :

$dom = new DOMDocument("1.0", "UTF-8"); $dom->load($xmlFile); $xp = new DOMXPath($dom); $pageNo = 2; $list = $xp->query("/book/page[@n=''" . $pageNo . "'']/following-sibling::*"); foreach ($list as $node) { if ($node->nodeName == ''page'' || $node->nodeName == ''endpages'') { break; } echo $node->textContent . "<br />"; // <entry /> node }

Estoy bastante seguro de que no funcionará muy bien si tienes muchas páginas en el archivo XML y estás tratando de obtener solo los elementos de la página uno, pero en términos de líneas de código esto es supervisable y tal vez alguien más tiene algunas ideas sobre cómo optimizar la expresión XPath.