2012-11-10 43 views
0

我有一个XML文件,其中载有我不需要的记录,XML文件通过XMLRPC进入WordPress很少。我需要做的是根据我不需要的日期去除所有记录,这样我就不会有数百个通过PHP重复发布的帖子。我的XML文件的格式为这样:删除基于日期节点的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

您需要将'$ query'变量放入'query()'调用中。也'。 =“%s”'应该已经可以工作了。除此之外,我会说它看起来不错。 --- http://eval.in/2668 – hakre

+1

这可以通过XSLT 2.0轻松完成。 –

+0

谢谢,这是我认为如何使变量删除昨天以外的所有内容?我知道文件中的第一个日期,所以我想我需要为第一个日期创建一个新变量,然后将它与昨天进行比较,如果它在两者之间,那么删除记录?我将如何做到这一点? – csuk1

回答

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); 
    } 
}