所以让我们说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 :(得分:6)
如何使用 simplexml 和 XPath 选择器?
$xml = new SimpleXMLElement($htmlString);
$result = $xml->xpath('//option[@selected="selected"]');
$option = array_pop($result);
var_dump($option);
(测试,使用PHP 5.3.0)
答案 1 :(得分:5)
我认为它无效,因为您忘记使用其属性DOMNodeList
访问item
项目。
尝试这种方法,循环返回DOMNodeList
的整个长度。检查当前项索引处的DOMNode
是否具有名为“selected”的属性
$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;
}
}
我的确切代码:
$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;
输出:
Num是3
答案 2 :(得分:1)
调试的下一步是验证$ string是否包含您期望的值。发布的原始代码是正确的。
答案 3 :(得分:1)
我能够通过这样做得到它:
$xpath->query("//select[@name='foo']/option[@selected]");
这只返回标记为已选择的节点(它没有选择=“已选择”)
答案 4 :(得分:0)
更优雅的代码,遍历html文件中的所有选择框,找到所需的代码并打印出所选的选项:
Output Debug