2014-04-26 58 views
0

我想用解析XML的簡單DOM解析器。我的代碼正確返回"uri"標籤的所有內容。解析和過濾XML

例子:

"http://www.domain.com/Start/A/93243" 
"http://www.domain.com/Start/B/239483" 
"http://www.domain.com/Start/C/93433" 
"http://www.domain.com/Start/B/34299" 
"http://www.domain.com/Start/A/234343" 

現在我需要過濾返回值。我的腳本只能返回以特定文本開頭的"uri"內容,例如"http://www.domain.com/Start/A/"。所以,我的結果應該是:

"http://www.domain.com/Start/A/93243" 
"http://www.domain.com/Start/A/234343" 

That's我的出發代碼:

<?php 
require_once ('simple_html_dom.php'); 

$dom = new DOMDocument; 
$dom->load('xml-url'); 

$uri = $dom->getElementsByTagName('uri'); 

foreach ($uri as $uri) { 
    echo $uri->nodeValue, PHP_EOL; 
} 

?> 

回答

0

您包含一個庫,但是您正在使用DOMDocument。所以你不需要圖書館。 DOMDocument是PHP ext/dom的一部分。這裏是另一個類,它允許你使用Xpath來從DOM文檔中獲取節點。

選擇所有a元素節點的所有href屬性節點:

//a/@href

通過字符串前綴過濾它們:

//a/@href[starts-with(., "http://www.domain.com/Start/A/")]

DOMXpath ::評估()是你所需要的方法用於獲取節點:

$hrefs = $xpath->evaluate(
    '//a/@href[starts-with(., "http://www.domain.com/Start/A/")]' 
); 

完整示例:https://eval.in/142509

$xml = <<<'XML' 
<body> 
<a href="http://www.domain.com/Start/A/93243">1</a> 
<a href="http://www.domain.com/Start/B/239483">1</a> 
<a href="http://www.domain.com/Start/C/93433">1</a> 
<a href="http://www.domain.com/Start/B/34299">1</a> 
<a href="http://www.domain.com/Start/A/234343">1</a> 
</body> 
XML; 

$dom = new DOMDocument(); 
$dom->loadXml($xml); 
$xpath = new DOMXpath($dom); 

$hrefs = $xpath->evaluate(
    '//a/@href[starts-with(., "http://www.domain.com/Start/A/")]' 
); 

foreach ($hrefs as $hrefAttribute) { 
    var_dump($hrefAttribute->value); 
} 

輸出:

string(35) "http://www.domain.com/Start/A/93243" 
string(36) "http://www.domain.com/Start/A/234343" 
0

您可以使用strpos()返回搜索字符串的索引,這樣你就可以檢查它是否是0,這意味着它從搜索字符串開始。

foreach ($uri as $uri) { 
    if(strpos($uri->nodeValue, 'http://www.domain.com/Start/A/') === 0){ 
     echo $uri->nodeValue, PHP_EOL; 
    } 
}