我正在使用curl并尝试使用DOMXPath从选择列表中获取所选项目 我很接近,我可以得到选择和他们的选项,只是无法弄清楚如何判断一个是否被选中。
所以这是我的代码到目前为止。我可以获得选择名称和所有选项文本和值
$newDom = new domDocument;
$newDom->loadHTML($result);
$xpath = new DOMXPath($newDom);
$values = $xpath->evaluate("/html/body//select");
for ($cnt = 0; $cnt < $values->length; $cnt++) {
$value = $values->item($cnt);
$name = $value->getAttribute('name');
$options = $xpath->query("*/select[@name='".$name."']/option");
foreach ($options as $option) {
$optionValue = $option->getAttribute('value');
$optionContent = $option->nodeValue;
}
}
So i replaced
$options = $xpath->query("*/select[@name='".$name."']/option");
带
$options = $xpath->query("*/select[@name='".$name."']/option[@selected='selected']");
现在$ options是空的
html看起来像
<select name=inc_paytype>
<option value="0">None<option value="1">Cash/Check<option value="2" selected>Credit<option value="3">ECash<option value="4">EFT<option value="5">Credit once, then cash/check
</select>
感谢您的帮助
答案 0 :(得分:1)
我找到了答案。不完美但有效。
$xpath = new DOMXPath($newDom);
$options = $xpath->query('/html/body//select');
foreach ($options as $option) {
$name =$option->getAttribute('name');
$children = $option->childNodes;
foreach ($children as $child) {
$tmp_doc = new DOMDocument();
$tmp_doc->appendChild($tmp_doc->importNode($child,true));
if ( strstr( $tmp_doc->saveHTML() , "selected" ) ){
$optionValue = $child->getAttribute('value');
$optionContent = $child->nodeValue;
}
}
}
答案 1 :(得分:0)
您可以在HTML文件中使用selected =“selected”替换“selected”,然后
$options = $xpath->query("//select[@name='".$name."']/option[@selected='selected']/@value");
这项工作适合我。