我正在解析包含以下内容的HTML页面:
<select>
<option value="somevalue">Somedata</option>
</select>
我需要从那里得到somevalue和somedata。
最简单的方法是什么? 应该注意的是,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!
答案 0 :(得分:4)
好的,因为我看不到完整的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”的所有选项标签。为此,我将使用一个名为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
你有它。
答案 1 :(得分:2)
答案 2 :(得分:0)