2012-06-04 49 views
0

我想讀一些與RSS提要DOM PHP中像這樣的:僅在PHP DOM中選擇沒有名稱空間/前綴的節點?

<channel> 
     <atom:link href='' rel='self' type='application/rss+xml' /> 
     <title>TechStuff</title> 
     <link>http://www.howstuffworks.com</link> 

搶鏈接(<link></link>)我使用這段代碼:

$doc->getElementsByTagName('link')->item(0); 

它工作在我嘗試過的所有其他RSS源。但是這個人在<link>之前放置了<atom:link>,這意味着它代替<atom:link>

那麼我該如何做才能選擇沒有命名空間的節點呢?

回答

0

你可以告訴節點是否通過檢查->prefix->namespaceURI有一個命名空間:

foreach ($doc->getElementsByTagName('link') as $link) { 
    if (strlen($link->prefix)) { 
     continue; 
    } 
    // $link does not have prefix 
} 
1

可以通過使用DOMXPathXPath syntax來解決它。

+0

如果你添加一個小例子怎麼樣(只是一個示例xpath,然後xpath函數名應該爲自己說話) – hakre

1

這裏是DOMXPath例如:

$xpath = new DOMXpath($doc); 
$linkPath = $xpath->query("/rss/channel/link"); 
$link = $linkPath->item(0)->nodeValue; 

在一個類似XML的層次結構,它爲我工作。

相關問題