基于日期节点删除XML记录

时间:2012-11-10 16:05:41

标签: php xml xpath

我有一个XML文件,其中包含我不需要的大量记录,XML文件很少通过XMLRPC进入WordPress。我需要做的是根据我不需要的日期删除所有记录,这样我就不会通过PHP发布数百个重复的帖子了。我的XML文件格式如下:

<data>
 <in>
   <a>First Name</a>
   <b>Surname </b>
   <c>07:00:00 11/08/2012</c>
 </in>
 <in>
   <a>First Name</a>
   <b>Surname </b>
   <c>08:00:00 11/09/2012</c>
 </in>
 <in>
   <a>First Name</a>
   <b>Surname </b>
   <c>09:00:00 11/10/2012</c>
 </in>
</data>

所以我需要检查是否是昨天,是否保留记录,如果是在那之前将其从XML文件中删除。从狩猎到现在为止我有这个:

<?php

$DATE = date( "Y-m-d", mktime(0, 0, 0, date("m"), date("d")-1, date("y")) );
$searchString = '';
$doc = new DOMDocument;
$doc->preserveWhiteSpace = FALSE;
$doc->load('file' . $DATE . '.xml');

$xPath = new DOMXPath($doc);
$query = sprintf('//in[./c[contains(., "%s")]]', $searchString);
foreach($xPath->query() as $node) {
$node->parentNode->removeChild($node);
}
$doc->formatOutput = TRUE;
echo $doc->saveXML();

?>

如果这样可行,那么我想我只需要正确的搜索字符串,抱歉我对xPath不太好

1 个答案:

答案 0 :(得分:0)

如果<c>标记始终包含日期,并且文档的结构总是与您的示例类似,则XPath会使您的解决方案变得更加复杂。相反,只需使用getElementsByTagName()

$lastDt = new DateTime(/* date of the last item you recorded goes here */);

$dom = new DOMDocument();
$dom->load(/* path to your XML file goes here */);

foreach ($dom->getElementsByTagName('c') as $node) {
    $dt = new DateTime($node->nodeValue);

    if ($dt <= $lastDt) {
        $in = $node->parentNode;
        $in->parentNode->removeChild($in);
    }
}