2017-06-13 58 views
0

我有下面的PHP代码:如何过滤simplexml_load_file foreach循环?

<?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的,但我想筛选阳性的比赛(和否定匹配后),例如专用线即包含“苹果”和“果汁”(对于不包含“rss”或“站点地图”的消极行,只有行)。我尝试了几种使用preg_match的方法,但没有成功,我得到空白页面结果或500错误。 我提取并想要过滤的xml文件(一个简单的sitemap.xml文件)有大约20000行/ url的

+0

向我们展示你的企图,我们可以尝试找到你在哪里错了。 –

+0

字符串是否需要包含_both_关键字,或者您的意思是_any_关键字? (它是'和'还是'or'?) –

回答

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"; 
    } 
} 
+0

完美。谢谢,我想要的工作方式 – becoolflyer

+0

有没有什么办法可以从struts中的$ variable获得AND(&&)或OR(||)? – becoolflyer

0

可以使用xpath()此:

特别contains()

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

否定,包装p在not()表达:

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