【发布时间】:2021-07-25 04:22:34
【问题描述】:
我是 xml 文件相关内容的新手。我遇到了一个问题。
我有一个 mysql 查询,它获取近 5000 行的 url 数据(1 行包含 1 个 url)。 所以我实现了一个 cron,它可以通过分页一次从 mysql 获取 1000 行。我需要对 url 进行一些验证,并且应该在 xml 文件中附加有效的 url。
这是我的代码
public function urlcheck()
{
$xFile = $this->base_path."sitemap/path/urls.xml";
$page = 0;
$cache_key = 'valid_urls';
$page = $this->cache->redis->get($cache_key);
if(!$page){
$page=0;
}
$xFile = simplexml_load_file($xFile);
$this->load->model('productnew/productnew_es6_m');
$urls= $this->db->query("SELECT url FROM product_data where `active` = 1 limit ".$page.",1000")->result();
$dom = new DOMDocument('1.0','UTF-8');
$dom->formatOutput = true;
$root = $dom->createElement('urlset');
$root->setAttribute('xsi:schemaLocation', 'http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd');
$root->setAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance');
$root->setAttribute('xmlns', 'http://www.sitemaps.org/schemas/sitemap/0.9');
$dom->appendChild($root);
foreach($urls as $val)
{
// validations here
$url = $dom->createElement('url');
$root->appendChild($url);
$lastmod = $dom->createElement('lastmod', date("Y-m-d"));
$url->appendChild($lastmod);
$page++;
}
$dom->saveXML();
$dom->save($xFile) or die('XML Create Error');
if(sizeof($urls) == 0){
$page = 0;
}
print_r($page);
$this->cache->redis->save($cache_key, $page, 432000);
// echo '<xmp>'. $dom->saveXML() .'</xmp>';
// $dom->saveXML();
// $dom->save($xFile) or die('XML Create Error');
}
在我第一次执行 cron 后,1000 个 url 中的 300 个有效 url 被保存到 xml 文件中, 现在让我们说在我的第二次 cron 执行中,我有 1000 个有效 url 中的 200 个。
我的预期结果是将这 200 个附加到现有的 xml 文件中,以便我的 xml 文件包含总共 500 个有效 url,并且如上所述,xml 文件应该在 5000 个 url 之后刷新。
但是每次执行 cron 后,旧的 url 数据都会被最新的一次替换。
我想知道如何在不覆盖 XML 的情况下保存 url 值。 提前谢谢你!
【问题讨论】:
-
您使用
simpleXML加载文件,但使用DOMDocument保存不同的文件 -
foreach($urls as $val)-$urls来自哪里? -
@ProfessorAbronsius 对不起,我现在更新了内容,我也尝试过使用 $dom->loadXML(xFile),但没有用
-
对我来说看起来一样...你用
simplexml_load_file($xFile)打开$xFile~ 然后创建一个新的DOMDocument实例,做各种事情并将新文件保存为$xFile -
好的 - 花了一段时间,但我发现了变化......我的错!
标签: php xml simplexml xmldocument xmldom