簡體   English   中英

解析HTML以使用PHP獲取所有Option標簽

[英]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">&nbsp;</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">&nbsp;</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

那里有它。

使用http://php.net/manual/en/book.dom.php

請不要嘗試使用正則表達式

HTML不是常規語言。 嘗試這樣解析它,乍一看似乎行得通,但是稍后肯定會咬你。

回答您的問題:

最簡單的方法是將正則表達式preg_match_all()函數一起使用。

您必須創建一些與所有選項標簽匹配的正則表達式,並提取所需的兩個值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM