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&quot; Copy + Paste&quot;はありますか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