Автоповтор структуры с использованием simpleXML?
Вопрос
Я определяю элементы формы в простой 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>
Решение
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;
}
}
}
}
Другие советы
Вы должны создать SimpleXmlElement с таким форматом и использовать клон , обновляя любые измененные атрибуты или суб-теги. каждый раз.