SimpleXML kullanarak Otomatik tekrar yapılar?

2 Cevap php

Ben bu yüzden böyle basit bir XML yapısındaki formun unsurlarını tanımlayan am:

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

Ben kesinlikle aynı bilgileri içeren büyük blokları var, örneğin Form böylece sayfanın arka plan, içerik alanı, üst bar ve tanımlamak için alanlar. Bu çalışma ve bakmaya XML dosyası çok hantal yapıyor.

Benim durumumda, SimpleXML - - diğerinden belli bir şube içeriğini bakmak için XML ayrıştırıcı söyler / komut / deyimi oluşturmak "Kopyala + Yapıştır" yerel XML var mı?

Pseudo-code:

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

2 Cevap

XML sadece bir biçimi, bu yüzden hiçbir kopyalama komutu. XSLT bunu yapabilir, ama muhtemelen ihtiyaçlarınız için çok karmaşık.

Benim tavsiyem: klişe öğeleri ekler bir PHP işlevi oluşturun. Örneğin:

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

Sen formatta bir SimpleXMLElement oluşturmak ve herhangi nitelikleri veya alt etiketleri her zaman değişti güncelleyerek, clone kullanmak istiyorsunuz.