Pergunta

Eu estou definindo os elementos de forma em uma estrutura XML simples assim:

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

Eu tenho grandes blocos contendo informações absolutamente idênticos, por exemplo, os campos do formulário para definir o plano de fundo da página, a área de conteúdo, a barra superior, e assim por diante. Isto está a tornar o arquivo XML muito complicado para trabalhar e olhar através de.

Existe um XML nativo "Copy + Paste" construção / comando / indicação que diz ao analisador XML - no meu caso, simpleXML - para procurar o conteúdo de um determinado ramo de outro?

Em pseudo-código:

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

Solução

XML é apenas um formato, de modo comando não copiar. XSLT pode fazer isso, mas é provavelmente muito complicado para as suas necessidades.

Meu conselho: crie uma função PHP que adiciona seus elementos clichê. Por exemplo:

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

Outras dicas

Você criaria um SimpleXMLElement com o formato e usar clone , atualizando todos os atributos alterados ou sub marcas cada vez.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top