Domanda

Sto definendo gli elementi del modulo in una semplice struttura XML in questo modo:

<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.

Ho blocchi di grandi dimensioni contenenti informazioni assolutamente identiche, ad es. i campi del modulo per la definizione dello sfondo della pagina, l'area del contenuto, la barra superiore e così via. Ciò sta rendendo il file XML molto complicato da utilizzare e da esaminare.

Esiste un XML nativo " Copia + Incolla " costrutto / comando / istruzione che dice al parser XML - nel mio caso, simpleXML - di cercare il contenuto di un certo ramo da un altro?

In pseudo-codice:

<subtab id="content_background" copyFrom="../page_background">
<!-- sub-elements from "page_background" are magically copied here 
     by the parser -->
</subtab>
È stato utile?

Soluzione

XML è solo un formato, quindi nessun comando di copia. XSLT può farlo, ma probabilmente è troppo complicato per le tue esigenze.

Il mio consiglio: crea una funzione PHP che aggiunga gli elementi della tua caldaia. Ad esempio:

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;
            }
        }
    }
}

Altri suggerimenti

Dovresti creare un SimpleXmlElement con il formato e utilizzare clone , aggiornando eventuali attributi o tag secondari modificati ogni volta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top