2011-12-11 19 views
0

我在從SimpleXMLElement對象中提取我想要的數據時遇到了一些問題。這裏是我使用的代碼的基礎:使用cURL和simpleXMLElement提取數據。如何在XPATH之後獲取XML元素的值?

curl_setopt($ch, CURLOPT_URL, $URL); 
$html = curl_exec($ch); 
$html = $tidy->parseString($html, $tc, 'utf8'); 
$tidy->cleanRepair(); 
$html = $tidy->body()->value; 
$xml = new SimpleXMLElement($html); 

$xml = $xml->xpath("//ul[@id='wxoptions']/li[3]/a"); //Your XPATH 

print_r($xml); 

這導航到正確的HTML元素我想要的,但打印:

Array 
(
    [0] => SimpleXMLElement Object 
     (
      [@attributes] => Array 
       (
        [href] => http://www.mylink.com 
        [title] => mylink 
       ) 

      [0] => mylink 
     ) 

) 

我需要的值是[HREF],「http://www.mylink.com 「在這個陣列中。我如何從包含的輸出中提取出來?我很難過,對SimpleXMLElement和Xpath也很陌生。

+1

請注意,您也可以選擇attibute的直接:'// UL [@ ID = 'wxoptions'] /李[ 3]/a/@ href' –

+0

謝謝!這真的很有用 – dremme

回答

0

使用迭代,並attributes

foreach ($xml->xpath("//ul[@id='wxoptions']/li[3]/a") as $node) 
{ 
    $href = $node->attributes("href"); 
} 

或者直接叫:

$href = $xml[0]->attributes("href"); 
+0

我試過使用這兩種方法: '$ xml = $ xml-> xpath(「// ul [@ id ='wxoptions']/li [3]/a」); $ href = $ xml [0] - > attributes(「href」);' 但是,這會返回一個空的SimpleXMLElement對象到$ href。 – dremme

+0

只是爲了澄清,您使用了哪種方法? (您在評論中提到的錯誤用法) – ajreal

+0

或者您可以包含XML的示例? – ajreal