好吧,由於我看不到完整的HTML,我不確定它是否格式良好,所以我會嘗試使用更寬容的DOM函數來做到這一點。首先,我要利用這個最小的HTML文件作爲樣本:
的test.html
<html>
<body>
<select name="attrib1" class="Input">
<option value="0"> </option>
<option value="140">140</option>
<option value="141">150</option>
<option value="142">160</option>
</select>
</body>
</html>
那麼現在,我們需要做的第一件事情就是創建一個DOM解析器。我們將做到這一點,像這樣:
$doc = new DOMDocument();
$doc->loadHTMLFile("test.html");
好了,接下來我們需要看看 要求:
我解析和HTML頁面 包含:
<select>
<option value="somevalue">Somedata</option>
</select>
而且我需要同時得到somevalue和 somedata。
你還別說:
請注意,該名稱始終attrib1!
基於這些要求,我將選擇名稱爲「attrib1」的所有選項標籤。爲此,我將使用一種名爲XPath的東西。這是根據特定條件選擇dom元素的一種非常靈活的方法。讓我們慢慢建立了這一點:
*/
select all elements
*/select
select all elements that are select elements
*/select[@name='attrib1']
select all elements that are select elements with the name of attrib1
*/select[@name='attrib1']/option select all
select all option elements under all select elements with the name of attrib1
那麼現在,我們需要做的查找,所以我們使用XPath功能:
$xpath = new DOMXpath($doc);
$options = $xpath->query("*/select[@name='attrib1']/option");
foreach ($options as $option) {
}
現在我們需要的價值屬性,裏面的文字。我們首先獲得的價值屬性:
$optionValue = $option->getAttribute('value');
然後,我們得到了什麼是選項標籤中:
$optionContent = $option->nodeValue;
一旦我們把這個放在一起:
$doc = new DOMDocument();
$doc->loadHTMLFile("test.html");
$xpath = new DOMXpath($doc);
$options = $xpath->query("*/select[@name='attrib1']/option");
foreach ($options as $option) {
$optionValue = $option->getAttribute('value');
$optionContent = $option->nodeValue;
echo "$optionValue and $optionContent\n";
}
我們得到以下輸出:
0 and
140 and 140
141 and 150
142 and 160
在那裏,你有它。
答案取決於該HTML是否有效。 SimpleXML非常易於使用,但如果您嘗試將它傳遞給不符合要求的HTML文檔,它將不會很有用。 – 2011-05-21 01:37:56
我編輯了原文,以反映它的外觀。 SimpleXML可以在這裏使用嗎?如果是這樣,怎麼樣? – Eax 2011-05-21 01:57:50
你能夠顯示完整文檔嗎?或者是它? – 2011-05-21 02:36:19