2013-08-19 31 views
0

我有一个xml文件,我正在重写其中的一部分,并且我需要用每个str_replace增加一个毫秒(或秒)的时间戳。我找到了用于递增的教程,并为时间戳添加了第二个教程,但不是在循环或每个替换实例期间添加时间。是否有可能增加str_replace中的时间戳?

我更换代码如下所示:

$data = str_replace("</tag1><tag2>", "</tag1><myDate>".date(DATE_ATOM)."</myDate><tag2>", $data); 

(澄清,上面有该文件中的模式的多个实例)

的是作品的替代品,但无法弄清楚如何在每次出现时向日期字符串添加毫秒或秒,因此它们都是唯一的。

谢谢!

UPDATE:

感谢vascowhite指着我在正确的方向,我不得不这样一些DOM操作相结合,但它的工程!这是解决方案,对于那些想知道:

$domsrc = file_get_contents("output.xml"); 
$MYdom = new DomDocument(); 
$MYdom->loadXML($domsrc); 
$date = new DateTime(); 
$oneSecond = new DateInterval('PT1S'); 

$descriptions = $MYdom->getElementsByTagName('myDate'); 
foreach($descriptions as $nodeDesciption) 
{ 
    $nodeDesciption->nodeValue = $date->format(DATE_ATOM); 
    $date->add($oneSecond); 
} 
$MYdom->save("DOMoutput.xml"); 
+0

我已经搜遍了网络,找不到处理这两件事情的任何地方(str_replace和TIME递增)。我可以找到一个或另一个,但增加解决方案不处理时间。 :( – Stephen

回答

0

我不知道我理解你的问题100%,但我会在回答它采取了一枪。

首先,您需要得到您的环路外的当前时间和设置您的增量时段(1秒): -

$date = new \DateTime(); 
$oneSecond = new \DateInterval('PT1S'); 

那么你的循环中使用此替换当前的代码: -

$data = str_replace("</tag1><tag2>", "</tag1><myDate>".$date->format(DATE_ATOM)."</myDate><tag2>", $data); 
$date->add($oneSecond); 

有关DateTime类的信息,请参阅the manual

+0

感谢您的回复,我似乎无法完成这项工作。我有一个打开的文件,我一直在重写所有的数据,然后在最后保存我的文件。但是我怎样才能使str_replace循环停止在每次发生都要被替换? 我试着用simplexml_load_file重新加载文件,然后应用你的逻辑,但是它给了我错误......我现在正在尝试下去,我会在这里写回来。 – Stephen

+0

OMG将您的建议与其他一些DOM阅读相结合,现在我已经完成了所有工作,谢谢! – Stephen

相关问题