Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 解析HTML页面以将字段提取到数组中,如:value=>;选项\u文本_Php_Parsing_Xpath_Domdocument - Fatal编程技术网

Php 解析HTML页面以将字段提取到数组中,如:value=>;选项\u文本

Php 解析HTML页面以将字段提取到数组中,如:value=>;选项\u文本,php,parsing,xpath,domdocument,Php,Parsing,Xpath,Domdocument,当前情景: 我正在用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">

当前情景:

我正在用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>
问题仍然是:


如何解析HTML页面以将选项选择的字段提取到一个数组中,如:value=>option\u text

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

$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
)

你发布的代码应该有效。您可以通过以下方式更改代码

$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
)

非常感谢。我认为有一个无形的错误围绕着。。。是的,这很有效。。我想可能是html页面的格式不正确或者什么的。。$html是cURL的结果/返回。。。我不明白。。html在那里,结果是空的..正如php页面所说()loadHtml函数返回一个布尔值来检查它是否是一个有效的html字符串。您可以检查它。因此,如果在选择输入之前还有任何其他内容,则任何类型的数据,如其他标记或文本。。Xpath不起作用……这可以用其他方法实现吗?如何按节点解析代码?谢谢。我认为有一个无形的错误围绕着。。。是的,这很有效。。我想可能是html页面的格式不正确或者什么的。。$html是cURL的结果/返回。。。我不明白。。html在那里,结果是空的..正如php页面所说()loadHtml函数返回一个布尔值来检查它是否是一个有效的html字符串。您可以检查它。因此,如果在选择输入之前还有任何其他内容,则任何类型的数据,如其他标记或文本。。Xpath不起作用……这可以用其他方法实现吗?如何按节点解析代码?我认为您应该选择[@name…而不是
*/select
我认为您应该选择[@name…而不是
*/select