我有一个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不太好
答案 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);
}
}