我正在尝试编写一个脚本,它将读取远程的sitemap.xml并解析其中的url,然后依次加载每个url以进行预缓存,以实现更快的浏览速度。
这样做的原因是:我们正在开发的系统会动态地将DITA XML写入浏览器,第一次加载页面需要等待8-10秒。之后的加载时间可以缩短至1秒左右。显然,预缓存页面可以提供更好的用户体验。
每当我们在此服务器上准备新的出版物或执行任何测试/修补操作时,都必须清除缓存,因此我们想编写一个脚本,它将遍历sitemap并加载每个url。
经过一些阅读,我决定使用PHP和Curl。无论这是否是一个好主意,我不知道。我更熟悉Perl,但目前系统上既没有安装PHP也没有安装Perl,所以我想尝试一下PHP。
到目前为止,我从“网络”上抓取的代码读取了sitemap.xml并将其写入我们服务器上的xml文件中,并在浏览器中显示它。据我所知,这只是一次性倾倒整个文件?
希望这个可以获取URL中的每一个位置,但实际上什么也没有产生,我陷入了困境。
请问有人能指导我如何获取多个父级的子级,并且最好的方法是加载和缓存此页面,我认为这只是一个简单的GET请求?
我希望我已经提供了足够的信息。如果我漏掉了什么(除了实际编写PHP的能力),请告诉我;-)
谢谢。
这样做的原因是:我们正在开发的系统会动态地将DITA XML写入浏览器,第一次加载页面需要等待8-10秒。之后的加载时间可以缩短至1秒左右。显然,预缓存页面可以提供更好的用户体验。
每当我们在此服务器上准备新的出版物或执行任何测试/修补操作时,都必须清除缓存,因此我们想编写一个脚本,它将遍历sitemap并加载每个url。
经过一些阅读,我决定使用PHP和Curl。无论这是否是一个好主意,我不知道。我更熟悉Perl,但目前系统上既没有安装PHP也没有安装Perl,所以我想尝试一下PHP。
到目前为止,我从“网络”上抓取的代码读取了sitemap.xml并将其写入我们服务器上的xml文件中,并在浏览器中显示它。据我所知,这只是一次性倾倒整个文件?
<?php
$ver = "Sitemap Parser version 0.2";
echo "<p><strong>". $ver . "</strong></p>";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://ourdomain.com/sitemap.xml;jsessionid=1j1agloz5ke7l?id=1j1agloz5ke7l');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$xml = curl_exec ($ch);
curl_close ($ch);
if (@simplexml_load_string($xml)) {
$fp = fopen('feed.xml', 'w');
fwrite($fp, $xml);
echo $xml;
fclose($fp);
}
?>
不要将整个文档倒入文件或屏幕上,最好遍历xml结构并仅获取我需要的url。
XML格式如下:
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9	http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<url>
<loc>http://ourdomain.com:80/content/en/FAMILY-201103311115/Family_FLJONLINE_FLJ_2009_07_4</loc>
<lastmod>2011-03-31T11:25:01.984+01:00</lastmod>
<changefreq>monthly</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>http://ourdomain.com:80/content/en/FAMILY-201103311115/Family_FLJONLINE_FLJ_2009_07_9</loc>
<lastmod>2011-03-31T11:25:04.734+01:00</lastmod>
<changefreq>monthly</changefreq>
<priority>1.0</priority>
</url>
我尝试使用SimpleXML:
curl_setopt($ch, CURLOPT_URL, 'http://onlineservices.letterpart.com/sitemap.xml;jsessionid=1j1agloz5ke7l?id=1j1agloz5ke7l');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec ($ch);
curl_close ($ch);
$xml = new SimpleXMLElement($data);
$url = $xml->url->loc;
echo $url;
这打印了第一个URL到屏幕上,这是个好消息!
http://ourdomain.com:80/content/en/FAMILY-201103311115/Family_FLJONLINE_FLJ_2009_07_4
接下来,我的步骤是尝试读取文档中的所有locs,所以我尝试了:
foreach ($xml->url) {
$url = $xml->url->loc;
echo $url;
}
希望这个可以获取URL中的每一个位置,但实际上什么也没有产生,我陷入了困境。
请问有人能指导我如何获取多个父级的子级,并且最好的方法是加载和缓存此页面,我认为这只是一个简单的GET请求?
我希望我已经提供了足够的信息。如果我漏掉了什么(除了实际编写PHP的能力),请告诉我;-)
谢谢。