PHP DOM获取<option>选中的标记

Ric*_*nop 2 php dom

那么让我们说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>
Run Code Online (Sandbox Code Playgroud)

我需要从那里提取属性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;
Run Code Online (Sandbox Code Playgroud)

这不起作用.之后$ num仍然等于零.

Jur*_*nka 6

如何使用simplexmlXPath选择器?

$xml = new SimpleXMLElement($htmlString);
$result = $xml->xpath('//option[@selected="selected"]');

$option = array_pop($result);
var_dump($option);
Run Code Online (Sandbox Code Playgroud)

(经过测试,在PHP 5.3.0上工作)


Ant*_*ney 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;
 }
}
Run Code Online (Sandbox Code Playgroud)

编辑:

我的确切代码:

$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;
Run Code Online (Sandbox Code Playgroud)

输出:

数是3