0

我有一个 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 不是很好

4

1 回答 1

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);
    }
}
于 2012-11-10T17:52:28.593 回答