通过SimpleXML PHP编辑XML节点

Ata*_*kov 1 php xml simplexml xml-parsing

我知道有几次问过类似的问题,但我无法找到以下解决方案:

我有一个简单的XML文件:servers.xml

<servers>

    <server>
        <name> Google </name>
        <address>http://www.google.com</address>
    </server>

    <server> 
        <name> Yahoo </name>
        <address>http://www.yahoo.com</address>
    </server>

    <server>
        <name> Bing </name>
        <address>http://www.bing.com</address>
    </server>

</servers>
Run Code Online (Sandbox Code Playgroud)

现在,我正在尝试获取<server>名称为"Google" 的节点,然后更改地址标记.我不知道如何使用SimpleXML去做.因此,示例场景如下:

  1. 获取服务器对象/数组,其中$ serverName ="Google"
  2. 将服务器的地址字段编辑为与http://www.google.co.uk不同的地方
  3. 将更改写回XML文件.

任何帮助,将不胜感激.

sal*_*the 7

  1. 获取服务器对象/数组,其中$ serverName ="Google"

    // An array of all <server> elements with the chosen name
    $googles = $servers->xpath('server[name = " Google "]');
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将服务器的地址字段编辑为与http://www.google.co.uk不同的地方

    //Find a google and change its address
    $google->address = 'http://www.google.co.uk';
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将更改写回XML文件.

    $servers->saveXML('path/to/file.xml');
    
    Run Code Online (Sandbox Code Playgroud)

完整的例子

$servers = simplexml_load_file('path/to/file.xml');
$googles = $servers->xpath('server[name=" Google "]');
foreach ($googles as $google) {
    $google->address = 'http://www.google.co.uk';
}
$servers->saveXML('path/to/file.xml');
Run Code Online (Sandbox Code Playgroud)

更多信息