根据Xpath属性查找XML节点,然后更新其子节点的值

问题描述:

实现此目的的最佳/最有效的方法? DOM文档? Xpath的?两者的混合?根据Xpath属性查找XML节点,然后更新其子节点的值

<currencies> 
    <currency id="USD"> 
    <title>United States Dollar</title> 
    <loc>American Samoa, British Indian Ocean Territory, Caribbean Netherlands, Ecuador, El Salvador, Guam, Haiti, Marshall Islands, Micronesia, Northern Mariana Islands, Palau, Panama, Puerto Rico, Timor-Leste, Turks and Caicos Islands, United States, U.S. Virgin Islands, Barbados (as well as Barbados Dollar), Bermuda (as well as Bermudian Dollar), Zimbabwe</loc> 
    <rate>1.2723</rate> 
    <timestamp>1325962378</timestamp> 
    </currency> 
</currencies> 

我需要根据属性“ID”我已经像这样做访问节点货币:

$xml->xpath('//currency[id="'.$currId.'"]'); 

我现在该如何进入所谓的“率”的子节点和在保存文件之前编辑它的值?

您的XPath几乎是正确的;你只是错过了一个@符号。以下是与SimpleXML一起使用的解决方案:

$nodes = $xml->xpath('//currency[@id="'.$currId.'"]'); // returns an array 
$nodes[0]->rate = $new_rate; // set the first element's rate to the rate stored 
          // in $new_rate 
$xml->asXML($filename); // save the XML to the file $filename