如何过滤simplexml_load_file foreach循环?

时间:2017-06-13 05:11:39

标签: php xml foreach preg-match

我有以下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

2 个答案:

答案 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()

特别是contains()

foreach($urlset->xpath('url[contains(., "foo")]') as $url) {

要取消,请将表达式包装在not()

foreach($urlset->xpath('url[not(contains(., "foo"))]') as $url) {