PHP - SimpleXML Добавление нового родителя - PullRequest
2 голосов
/ 03 февраля 2011

У меня есть XML-файл (пример ниже), и он сидит где-то в сети. Когда я импортирую его, используя SimpleXML, например $sXML = @simplexml_load_file( $url );, содержимое файлов преобразуется в простые объекты XMl.

<?xml version="1.0" encoding="UTF-8"?>
<title>Test</title>
<description>Test Description</description>
<item id="500">
<title>Item Title</title>
<description>Item Description</description>
</item>
<item id="501">
<title>Item Title</title>
<description>Item Description</description>
</item>

Я хотел бы добавить новый набор родителей. Один на корневом уровне, а другой содержит «элемент», так что он выглядит как XML-файл ниже:

<?xml version="1.0" encoding="UTF-8"?>
<data>
<title>Test</title>
<description>Test Description</description>
<content>
<item id="500">
<title>Item Title</title>
<description>Item Description</description>
</item>
<item id="501">
<title>Item Title</title>
<description>Item Description</description>
</item>
</content>
</data>

Как это возможно, используя SimpleXML или любым другим способом?

Спасибо за помощь.

1 Ответ

1 голос
/ 03 февраля 2011

Обратите внимание, что входной XML, приведенный в качестве примера, недопустим. Обязательно должен быть один корневой узел. Тем не менее, вот возможное решение:

$sXML = simplexml_load_file($url);

$nonItems = '';
$items = '';
foreach ($sXML as $child) {
    if ($child->getName() == 'item') {
        $items .= $child->asXML();
    } else {
        $nonItems .= $child->asXML();
    }
}
$xml = sprintf('<?xml version="1.0"?><data>%s<content>%s</content></data>',
        $nonItems, $items);
// echo simplexml_load_string($xml)->asXML();
...