1

当前情况:

我正在使用 DomDocument 将 html 页面加载到 var 中

$dom    = new DOMDocument('1.0', 'UTF-8');  
@$dom->loadHTML($html);

我需要解析 3 个选项字段列表。HTML 看起来像这样:

<li>
    <select id="advertiser" name="advertiser[]" multiple="multiple" autocomplete="off">                                                                         <option value="35" >Website Adv 1</option>
    <option value="36" >Website Adv 1</option>                                                                                                          <option value="41" >Website Adv 1</option>
    <option value="45" >Website Adv 1</option>
    </select>
</li>

现在我在 Stack 上找到了这段代码,但它不起作用..

$xpath = new DOMXpath($dom);
$options = $xpath->query("*/select[@name='advertiser[]']/option");
foreach ($options as $option) {
  $optionValue = $option->getAttribute('value');
  $optionContent = $option->nodeValue;
  echo "$optionValue and $optionContent\n";
}

问题仍然存在:

如何解析 HTML 页面以将选项选择的字段提取到数组中,例如:value=>option_text

4

1 回答 1

1

您发布的代码应该可以工作。您可以通过此更改代码

$dom    = new DOMDocument('1.0', 'UTF-8');  
$dom->loadHTML($html);

$xpath = new DOMXpath($dom);
$options = $xpath->query("*/select[@name='advertiser[]']/option");
$result = array();
foreach ($options as $option) {
  $optionValue = $option->getAttribute('value');
  $optionContent = $option->nodeValue;
  $result[$optionValue] = $optionContent;
}

print_r($result);

将您想要的项目加载到 $result 数组中。

结果应该是:

Array
(
    [35] => Website Adv 1
    [36] => Website Adv 1
    [41] => Website Adv 1
    [45] => Website Adv 1
)
于 2013-10-13T18:10:41.340 回答