SimpleXML добавление потомка с потомками и атрибутами - PullRequest
4 голосов
/ 19 апреля 2011

У меня есть какой-то 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 ]

14 голосов
/ 19 апреля 2011

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 голос
/ 19 апреля 2011
$xml->root->addChild('label', 'This is a label');

Эта операция возвращает ссылку на только что добавленного ребенка. Так что вы можете сделать это:

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

Исходя из этого, вы не можете добавить своих дополнительных дочерних элементов и атрибутов этому дочернему элементу.

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

Поскольку он возвращает ссылку, этот узел и атрибуты, которые были только что добавлены, также являются частью объекта $ xml.

...