Question

Je définis les éléments de la forme dans une structure XML simple comme suit:

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

J'ai de gros blocs contenant des informations absolument identiques, par exemple. les champs de formulaire permettant de définir l’arrière-plan de la page, la zone de contenu, la barre supérieure, etc. Cela rend le fichier XML très difficile à utiliser et à parcourir.

Existe-t-il un code XML natif "Copier + Coller"? construct / command / statement qui indique à l'analyseur XML - dans mon cas, simpleXML - de rechercher le contenu d'une branche donnée dans une autre?

En pseudo-code:

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

La solution

XML est juste un format, donc pas de commande de copie. XSLT peut le faire, mais c'est probablement trop compliqué pour vos besoins.

Mon conseil: créez une fonction PHP qui ajoute vos éléments standard. Par exemple:

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

Autres conseils

Vous devez créer un SimpleXmlElement au format et utiliser cloner pour mettre à jour les attributs modifiés ou les balises secondaires. à chaque fois.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top