2

我在一个简单的 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>
4

2 回答 2

4

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;
            }
        }
    }
}
于 2009-10-23T15:33:22.120 回答
0

您将使用该格式创建一个 SimpleXmlElement 并使用clone,每次更新任何更改的属性或子标签。

于 2009-10-23T15:29:48.200 回答