PHP XML - 将XML节点属性转换为仅一个节点

时间:2015-07-15 23:32:42

标签: php xml

我想编写一个PHP脚本来修改我的XML文件。

我将我的productId作为属性放在节点中,我想解析整个文件并将其转换为单独的节点。所以我想读取节点的属性并将该属性放在自己的节点中。但其余节点将保持不变。

在:

<product id="123">
<name>bob</name>
<lastname>tim</lastname>
</product>

要:

<product>
<id>123</id>
<name>bob</name>
<lastname>tim</lastname>
</product>

我可以在PHP中执行此操作吗?请记住,该文件中将包含超过一千种单独的产品。

1 个答案:

答案 0 :(得分:1)

你可以这样做。

$xml = new SimpleXMLElement('<product id="123"></product>');
if(!empty($xml['id'])) {
    $xml->addChild('id', $xml['id']);
    unset($xml['id']);
}
echo $xml->asXML();

输出:

<?xml version="1.0"?>
<product><id>123</id></product>

这是手册的链接和addchild功能链接。 http://php.net/manual/en/class.simplexmlelement.php
http://php.net/manual/en/simplexmlelement.addchild.php

更新

如果您有多个产品,可以像这样循环。

$xml = new SimpleXMLElement('<proudcts><product id="123"></product><product id="234"></product></proudcts>');
foreach($xml as $key => $data){
    if(!empty($data['id'])) {
        $data->addChild('id', $data['id']);
        unset($data['id']);
    }
}
echo $xml->asXML();

输出:

<?xml version="1.0"?>
<proudcts><product><id>123</id></product><product><id>234</id></product></proudcts>