1

我正在使用 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>

谢谢你的帮助

4

2 回答 2

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;
            }
       }
}
于 2012-10-07T02:53:49.130 回答
0

您可以在 HTML 文件中将“selected”替换为 selected="selected",然后

$options = $xpath->query("//select[@name='".$name."']/option[@selected='selected']/@value");

这对我有用。

于 2017-01-09T05:05:28.567 回答