0

必要のない大量のレコードを含む XML ファイルがあります。XML ファイルは、XMLRPC を介して WordPress にほとんど含まれていません。私がする必要があるのは、必要のない日付に基づいてすべてのレコードを削除して、PHP を介して何百もの投稿が重複しないようにすることです。MY 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 に答える