2012-10-06 4 views
1

Я использую завиток и пытаюсь получить выбранные элементы из списка выбора с помощью DOMXPath Я близок, я могу получить выбор и их параметры, просто не могу понять, как определить, .получение выбранного варианта с использованием php 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']"); 

и теперь $ вариантов пуст

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

Если атрибут указан, вы можете получить его из 'if ($ option-> getAttribute ('selected') == 'selected')' Но это только полезно для выбранной по умолчанию опции в разметку, загруженную в DOMDocument. –

+0

И xpath должен выглядеть как '*/select [@name = '". $ Name. "']/Option [@ selected = 'selected']' –

+0

Я обновил оригинал с большим количеством вопросов – randy

ответ

0

Я нашел ответ. Не идеально, но работает.

$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; 
      } 
     } 
} 
0

Вы можете заменить "выбран" с выбранным = "выбрано" в HTML файл, а затем

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

Эта работа для меня.

Смежные вопросы