需要帮助批量查找/替换文本文件的一部分

时间:2013-06-25 01:12:50

标签: php text replace find edit

我有一个相当独特的情况,我需要对XML(或纯文本)文件进行大量编辑。在XML文件中,有几个图像引用,例如:

<image>
  <id>image1</id>
  <dateTaken>Sun Sep 9 10:57:31 GMT-0700 2012</dateTaken>
  <dateAdded>Mon Jun 24 17:44:50 GMT-0700 2013</dateAdded>
  <filename>0881DAF2-80EC-7A25-9CF3-BFD67F4EF764.jpg</filename>
</image>

我需要做的是在<filename></filename>之间使用文件名,并使用它来替换{​​{1}}和<id>之间的部分。例如,在上面的例子中,我需要用0881DAF2-80EC-7A25-9CF3-BFD67F4EF764.jpg替换“image1”,所以它看起来像这样:

</id>

我需要在同一份文档中更改几百个这些图像引用。使用PHP或其他方法,我可以快速批量编辑文档,并将<image> <id>0881DAF2-80EC-7A25-9CF3-BFD67F4EF764.jpg</id> <dateTaken>Sun Sep 9 10:57:31 GMT-0700 2012</dateTaken> <dateAdded>Mon Jun 24 17:44:50 GMT-0700 2013</dateAdded> <filename>0881DAF2-80EC-7A25-9CF3-BFD67F4EF764.jpg</filename> </image> <id>之间的每个ID替换为</id><filename>之间的内容,在文档中的每个</filename> <image>引用中?非常感谢帮助!

1 个答案:

答案 0 :(得分:1)

假设你有一个这个xml的根,你可以通过将xml加载为$ xml_string来执行以下操作:

$xml = new SimpleXMLElement($xml_string);
foreach($xml->children() as $child){
$child->id = $child->filename;
}
$xml->asXml('updated.xml');

$xml = new SimpleXMLElement($xml_string); foreach($xml->children() as $child){ $child->id = $child->filename; } $xml->asXml('updated.xml');