使用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并使用克隆,更新任何更改的属性或子标记每一次。
不隶属于 StackOverflow