我有以下php代码:
<?php
$website_url = 'domain.com/sitemap.xml';
$xml=simplexml_load_file(''. $website_url.'') or die("Error: Cannot create object");
foreach($xml->url as $val)
{
echo $val->loc. '<br>';
}
它工作正常,我从xml站点地图文件中获取url,但我想过滤正匹配(并在负匹配之后),例如只包含“apple”和“juice”的行(并且对于负数,只有不包含“rss”或“sitemap”的行。我尝试了几种方法来使用preg_match,但没有成功,我得到空白页结果或500错误。 我提取并想要过滤的xml文件(一个简单的sitemap.xml文件)有大约20000行/ url
答案 0 :(得分:0)
尝试使用http://php.net/strpos进行匹配。您还可以检查rss和站点地图:
foreach($xml->url as $val)
{
$url = $val->loc;
if(strpos($url, 'apple') !== FALSE && strpos($url, 'juice') !== FALSE) {
echo "keyword found in URL\n";
break;
}
else {
echo "keyword not found\n";
}
}
答案 1 :(得分:0)
可以使用xpath()
:
SimpleXMLElement::xpath
- 对XML数据运行XPath查询特别是contains()
:
foreach($urlset->xpath('url[contains(., "foo")]') as $url) {
要取消,请将表达式包装在not()
:
foreach($urlset->xpath('url[not(contains(., "foo"))]') as $url) {