2

我知道类似的问题已经被问过好几次了,但我找不到以下问题的解决方案:

我有一个简单的 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>

现在,我正在尝试获取<server>名称为“Google”的节点,然后更改地址标签。我不知道如何使用 SimpleXML 来解决它。因此,示例场景如下:

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

任何帮助,将不胜感激。

4

3 回答 3

7
  1. 获取 $serverName = "Google" 的服务器对象/数组

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

    //Find a google and change its address
    $google->address = 'http://www.google.co.uk';
    
  3. 将更改写回 XML 文件。

    $servers->saveXML('path/to/file.xml');
    

完整示例

$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');

更多信息

于 2013-07-15T15:50:43.993 回答
1

使用 加载 XML 文件simplexml_load_file,遍历<server>节点,检查是否为 Google,如果为 True,则更改 .

$xml=simplexml_load_file("simple.xml");
foreach($xml->server as $server){
    ($server->name == trim("Google")) ? $server->address = "http://www.google.co.uk" : "";
}
于 2013-07-15T15:54:46.317 回答
0

下面的代码将帮助您修改 xml 并返回文本格式。

$xml_obj = new SimpleXMLElement($xml);

foreach ($xml_obj->server as $value) {
    /*Do something here*/
}
$doc = new DOMDocument();
$doc->formatOutput = TRUE;
$doc->loadXML($xml_obj->asXML());
$output = $doc->saveXML();
于 2017-02-16T20:11:15.453 回答