Автоповтор структуры с использованием simpleXML? - PullRequest
2 голосов
/ 23 октября 2009

Я определяю элементы формы в простой XML-структуре следующим образом:

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

У меня есть большие блоки, содержащие абсолютно идентичную информацию, например, поля формы для определения фона страницы, области содержимого, верхней панели и т. д. Это делает файл XML очень громоздким для работы и просмотра.

Существует ли встроенная конструкция XML "Копировать + Вставить" / команда / оператор, которая сообщает синтаксическому анализатору XML - в моем случае simpleXML - искать содержимое одной ветви из другой?

В псевдокоде:

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

Ответы [ 2 ]

4 голосов
/ 23 октября 2009

XML - это просто формат, поэтому нет команды копирования. XSLT может сделать это, но это, вероятно, слишком сложно для ваших нужд.

Мой совет: создайте функцию PHP, которая добавляет ваши стандартные элементы. Например:

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;
            }
        }
    }
}
0 голосов
/ 23 октября 2009

Вы должны создать SimpleXmlElement с форматом и использовать клон , каждый раз обновляя любые измененные атрибуты или вложенные теги.

...