2013-07-15 65 views
1

我知道类似的问题已经被问了好几次,但我不能找到解决如下:编辑XML节点采用的SimpleXML PHP

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

现在,我试图获取名称为“Google”的<server>节点,然后更改地址标记。 我不知道如何去使用SimpleXML。 因此,一个示例场景将在以下几点:

  1. 获取服务器对象/数组,其中$ SERVERNAME =“谷歌”
  2. 编辑服务器的地址栏,以不同的东西像http://www.google.co.uk
  3. 写更改回XML文件。

任何帮助,将不胜感激。

+0

三个downvotes和没有评论?这是我需要的,并有两个很好的答案。去搞清楚。 – Slashback

回答

6
  1. 获取服务器对象/数组,其中$ SERVERNAME = “谷歌”

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

更多信息

+0

谢谢,这正是我需要的! –

1

使用simplexml_load_file载入XML文件,循环遍历<server>节点,检查是否为Google,如果是,请更改。

$xml=simplexml_load_file("simple.xml"); 
foreach($xml->server as $server){ 
    ($server->name == trim("Google")) ? $server->address = "http://www.google.co.uk" : ""; 
} 
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();