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パーサー(私の場合はsimpleXML)に特定のブランチのコンテンツを別のブランチから検索するように指示するネイティブXMLの「コピー+貼り付け」コンストラクト/コマンド/ステートメントはありますか?

擬似コードの場合:

<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 に答える