2012-11-10 47 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); 
    } 
}