SimpleXML添加带子项和属性的子项

时间:2011-04-19 14:30:36

标签: php xml simplexml

我有一些XML需要添加一个孩子。

使用SimpleXML,添加简单节点时没有任何问题。

开头的XML看起来有点像这样:

<root>
    <item>
         <title>This is the title</title>
         <sort>2</sort>
    </item>
    <item>
         <title>This is another title</title>
         <sort>3</sort>
    </item>
</root>

我需要添加一个如下所示的节点:

    <label id=1>
         <title type=normal>This is a label</title>
         <sort>1</sort>
    </label>

结果将是:

<root>
    <item>
         <title>This is the title</title>
         <sort>2</sort>
    </item>
    <item>
         <title>This is another title</title>
         <sort>3</sort>
    </item>
    <label id=1>
         <title type=normal>This is a label</title>
         <sort>1</sort>
    </label>
</root>

我可以使用以下方法添加一个简单的孩子:

$xml->root->addChild('label', 'This is a label');

我无法将属性和子项添加到此新添加的节点中。

我不担心在XSLT中进行排序时附加与前置。

2 个答案:

答案 0 :(得分:14)

addChild返回添加的子项,因此您只需执行以下操作:

$label = $xml->root->addChild('label');
$label->addAttribute('id', 1);
$title = $label->addChild('title', 'This is a label');
$title->addAttribute('type', 'normal');
$label->addChild('sort', 1);

答案 1 :(得分:1)

$xml->root->addChild('label', 'This is a label');

此操作返回对刚刚添加的子项的引用。所以你可以这样做:

$child = $xml->root->addChild('label', 'This is a label');

由此,您无法将其他子项和属性添加到该子项。

$child->addAttributes('id', '1');

因为它返回一个引用,所以刚刚添加的节点和属性也是$ xml对象的一部分。