Pregunta

Estoy definiendo los elementos de la forma en una estructura XML simple de la siguiente manera:

<subtab id="page_background" label="Page Background" prefix="page">
   <input label="Background color" field="bgcolor" type="color"/>
   <input label="Background image" field="bgimage" type="image"/>
   <space />
 </subtab>
   etc.

Tengo bloques grandes que contienen información absolutamente idéntica, p. ej. los campos de formulario para definir el fondo de la página, el área de contenido, la barra superior, etc. Esto hace que el archivo XML sea muy incómodo para trabajar y examinar.

¿Existe un XML nativo " Copiar + Pegar " ¿Construir / comando / declaración que le indique al analizador XML, en mi caso, simpleXML, que busque el contenido de una determinada rama de otra?

En pseudocódigo:

<subtab id="content_background" copyFrom="../page_background">
<!-- sub-elements from "page_background" are magically copied here 
     by the parser -->
</subtab>
¿Fue útil?

Solución

XML es solo un formato, por lo tanto no hay comando de copia. XSLT puede hacer eso, pero probablemente sea demasiado complicado para sus necesidades.

Mi consejo: crea una función PHP que agregue los elementos de tu plantilla. Por ejemplo:

function default_elements(SimpleXMLElement $node)
{
    $default = array(
        'input' => array(
            array('label'=>"Background color", 'field'=>"bgcolor", 'type'=>"color"),
            array('label'=>"Background image", 'field'=>"bgimage", 'type'=>"image")
        ),
        'space' => array(
            array()
        )
    );

    foreach ($default as $name => $elements)
    {
        foreach ($elements as $attrs)
        {
            $new = $node->addChild($name);
            foreach ($attrs as $k => $v)
            {
                $new[$k] = $v;
            }
        }
    }
}

Otros consejos

Crearía un SimpleXmlElement con el formato y usaría clon , actualizando los atributos o sub etiquetas cambiados cada vez.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top