[英]Parsing HTML to get all Option tags with PHP
我正在解析HTML頁面,其中包含:
<select>
<option value="somevalue">Somedata</option>
</select>
我需要從那里獲取一些價值和一些數據。
最簡單的方法是什么? 應該注意的是somevalue和Somedata總是不同的(可以這么說)
它的格式如下:
<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>
請注意,名稱始終為 attrib1!
好的,因為我看不到完整的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>
我需要從那里獲取一些價值和一些數據。
您還提到:
請注意,名稱始終為attrib1!
基於這些要求,我將選擇名稱為“ attrib1”的所有select子選項標簽。 為此,我將使用稱為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) {
}
現在,我們需要value屬性和其中的文本。 我們首先獲取value屬性:
$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
那里有它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.