如何使用php DOM Script获取每个字段的特定值?对于以下格式?

时间:2017-06-07 05:33:00

标签: php html parsing dom

我希望得到每个字段的价值,如“德里”,“Kolkatta”。

我怎样才能使用php DOM Script?

这是要解析的页面的来源。

<tbody><tr>
<td>Delhi</td>
<td>66.91</td>
</tr>
<tr>
<td>Kolkata</td>
<td>69.52</td>
</tr>
<tr>
<td>Mumbai</td>
<td>78.44</td>   
</tr>
<tr>
<td>Chennai</td>
<td>69.93</td>
</tr></tbody> 

3 个答案:

答案 0 :(得分:1)

这里我们使用DOMDocument来实现所需的输出。

Try this code snippet here

$domDocument = new DOMDocument();
$domDocument->loadHTML($string);

$domXPath = new DOMXPath($domDocument);
$results = $domXPath->query("//tbody/tr/td");
$data=array();
for($x=0;$x<$results->length;$x+=2)
{
    $instance=$results->item($x);
    if($instance instanceof DOMElement)
    {
        $data[]=$results->item($x)->textContent;
    }
}
print_r($data);

答案 1 :(得分:0)

请在此处查看问题:How do you parse and process HTML/XML in PHP?

  

如何使用DOM扩展已在StackOverflow上广泛使用,因此如果您选择使用它,您可以确定您遇到的大多数问题都可以通过搜索/浏览Stack Overflow来解决

这是一个例子:

$html = <<<HTML
<tbody><tr>
<td>Delhi</td>
<td>66.91</td>
</tr>
<tr>
<td>Kolkata</td>
<td>69.52</td>
</tr>
<tr>
<td>Mumbai</td>
<td>78.44</td>
</tr>
<tr>
<td>Chennai</td>
<td>69.93</td>
</tr></tbody>
HTML;

$dom = new DOMDocument();
$dom->loadHTML($html);

$elements = $dom->getElementsByTagName('tr');
$data = [];
foreach($elements as $node) {
    $childElements = $node->getElementsByTagName('td');
    $data[$childElements->item(0)->nodeValue] = $childElements->item(1)->nodeValue;
}

答案 2 :(得分:0)

或者您可以使用simplexml功能,如果有错误的方法或错误的想法请有人纠正我

$xml='<tbody><tr>
<td>Delhi</td>
<td>66.91</td>
</tr>
<tr>
<td>Kolkata</td>
<td>69.52</td>
</tr>
<tr>
<td>Mumbai</td>
<td>78.44</td>   
</tr>
<tr>
<td>Chennai</td>
<td>69.93</td>
</tr></tbody> ';
echo "<pre>";
$arr=simplexml_load_string($xml);
$arr_new=array();
$arr1=json_decode(json_encode((array)$arr), TRUE);
foreach($arr1 as $val){
    foreach($val as $k=>$v){
        $arr_new[$val[$k]['td'][0]]=$val[$k]['td'][1];
    }
}

输出

Array
(
    [Delhi] => 66.91
    [Kolkata] => 69.52
    [Mumbai] => 78.44
    [Chennai] => 69.93
)