假设 HTML 看起来像这样:
<select name="some_name">
<option value="1">1</option>
<option value="2">2</option>
<option value="3" selected="selected">3</option>
<option value="4">4</option>
</select>
我需要从那里提取属性 selected="selected" 的选项标签。我怎样才能做到这一点?到目前为止我有这个:
$string = file_get_contents('test.html');
include 'htmlpurifier-4.0.0-standalone/HTMLPurifier.standalone.php';
$config = HTMLPurifier_Config::createDefault();
$config->set('HTML.Doctype', 'XHTML 1.0 Strict');
$purifier = new HTMLPurifier($config);
$string = $purifier->purify($string);
$dom = new DOMDocument();
$dom->loadHTML('<?xml encoding="UTF-8">' . $string);
$dom->preserveWhiteSpace = false;
$num = 0;
$optionTags = $dom->getElementsByTagName('option');
foreach ($optionTags as $o) {
if ($o->hasAttribute('selected')
&& 'selected' === $o->getAttribute('selected')) {
$num = $o->nodeValue;
}
}
echo $num;
但这是行不通的。之后 $num 仍然等于 0。
我相信它不起作用,因为您忘记访问DOMNodeList
的项目使用其属性item
.
尝试这种方法,循环遍历整个长度DOMNodeList
回。检查是否DOMNode
当前项目的索引处有一个名为的属性“选定”
$num = 0;
$optionTags = $dom->getElementsByTagName('option');
for ($i = 0; $i < $optionTags->length; $i++ ) {
if ($optionTags->item($i)->hasAttribute('selected')
&& $optionTags->item($i)->getAttribute('selected') === "selected") {
$num = $optionTags->item($i)->nodeValue;
}
}
EDIT:
我的确切代码:
$dom = new DOMDocument();
$dom->load("C:\\test.htm");
$num = 0;
$optionTags = $dom->getElementsByTagName('option');
for ($i = 0; $i < $optionTags->length; $i++ ) {
if ($optionTags->item($i)->hasAttribute('selected')
&& $optionTags->item($i)->getAttribute('selected') === "selected") {
$num = $optionTags->item($i)->nodeValue;
}
}
echo "Num is " . $num;
Output:
Num is 3
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)