使用条件将节点添加到XML

时间:2018-03-09 15:00:28

标签: php xml

我有以下XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <person>
        <id>1</id>
        <name>Jane</name>
        <surname>Smith</surname>
    </person>
    <person>
        <id>2</id>
        <name>John</name>
        <surname>Doe</surname>
    </person>
</root>

我有以下CSV文件:

id;phone
1;12345678
2;78903456

我使用PHP。我需要使用这样的XML: 将电话号码元素添加到ID为的人... 例如:将值为12345678的phone元素添加到id为1的person元素。

3 个答案:

答案 0 :(得分:1)

使用SimpleXML,您可以使用addChild()方法。

$file = 'xml/config.xml';

$xml = simplexml_load_file($file);

$galleries = $xml->galleries;

$gallery = $galleries->addChild('gallery');
$gallery->addChild('name', 'a gallery');
$gallery->addChild('filepath', 'path/to/gallery');
$gallery->addChild('thumb', 'mythumb.jpg');

$xml->asXML($file);

请注意,SimpleXML不会格式化#34;适合您的XML,但是从未格式化的SimpleXML表示到整齐缩进的XML并不是一个复杂的步骤,这里有很多问题。

答案 1 :(得分:1)

由于XML的内容会有所不同,因此XPath可能更容易找到您要更新的条目...

$telephoneList = [["id"=> 1, "phone" => "12345678"],
        ["id"=> 2, "phone" => "78903456"]];

$xml = simplexml_load_file("a.xml");
foreach ( $telephoneList as $telephone) {
    $person = $xml->xpath("//person[id={$telephone['id']}]");
    if ( count($person) == 1 )   {
        $person[0]->addChild("phone", $telephone['phone']);
    }
}

echo $xml->asXML();

这会尝试使用csv中的值<person>找到<id>元素。如果找到,则会使用addChild()

添加电话号码

只是在CSV文件中读取并按上述方式处理它。

答案 2 :(得分:0)

您可以从SimpleXMLElement循环$xml->children(),然后检查是否(string)$a->id === "1"。然后使用addChild将值phone的{​​{1}}元素添加到person元素。

12345678

Demo