2013-10-13 57 views
1

目前的情況:解析HTML頁面提取場到像數組:值=> option_text

我加載HTML頁面到VAR與的DomDocument

$dom = new DOMDocument('1.0', 'UTF-8'); 
@$dom->loadHTML($html); 

,我需要解析3個選項字段列表。該HTML看起來像這樣:

<li> 
    <select id="advertiser" name="advertiser[]" multiple="multiple" autocomplete="off">                   <option value="35" >Website Adv 1</option> 
    <option value="36" >Website Adv 1</option>                           <option value="41" >Website Adv 1</option> 
    <option value="45" >Website Adv 1</option> 
    </select> 
</li> 

現在我發現這堆代碼,但它不工作..

$xpath = new DOMXpath($dom); 
$options = $xpath->query("*/select[@name='advertiser[]']/option"); 
foreach ($options as $option) { 
    $optionValue = $option->getAttribute('value'); 
    $optionContent = $option->nodeValue; 
    echo "$optionValue and $optionContent\n"; 
} 

問題仍然是:

如何解析HTML頁面提取一個選項選擇的字段,如下所示:value => option_text

+0

我想你會想'//選擇[@name ...'而不是'*/select' – Phil

回答

1

您發佈的代碼應該有效。你可以通過這個改變代碼

$dom = new DOMDocument('1.0', 'UTF-8'); 
$dom->loadHTML($html); 

$xpath = new DOMXpath($dom); 
$options = $xpath->query("*/select[@name='advertiser[]']/option"); 
$result = array(); 
foreach ($options as $option) { 
    $optionValue = $option->getAttribute('value'); 
    $optionContent = $option->nodeValue; 
    $result[$optionValue] = $optionContent; 
} 

print_r($result); 

加載到$ result數組中你想要的項目。

結果應該是:

Array 
(
    [35] => Website Adv 1 
    [36] => Website Adv 1 
    [41] => Website Adv 1 
    [45] => Website Adv 1 
) 
+0

謝謝。我認爲有一個看不見的錯誤...是的,這很好..我認爲也許HTML頁面格式不正確或什麼..美元的HTML是一個捲曲的結果/返回...我不明白它.. html是有的,結果是空的.. –

+0

由於PHP頁面說(http://us2.php.net/manual/en/domdocument.loadhtml.php)loadHtml函數返回一個布爾值來檢查是否這是一個有效的HTML字符串。你可以檢查它。 –

+0

因此,如果在選擇輸入之前還有其他任何內容,就像其他標記或文本一樣,Xpath不起作用... –