如何在PHP中更优雅地解析html?

Jun*_*tae 6 php

这里有简单的HTML代码.

<table>

<tr><th>Name</th><th>Price</th><th>Country</th></tr>
<tr><td><a href="bbb/111">Apple</a></td><td>500</td><td>America</td></tr>
<tr><td><a href="bbb/222">Samsung</a></td><td>400</td><td>Korea</td></tr>
<tr><td><a href="bbb/333">Nokia</a></td><td>300</td><td>Finland</td></tr>
<tr><td><a href="bbb/444">HTC</a></td><td>200</td><td>Taiwan</td></tr>
<tr><td><a href="bbb/555">Blackberry</a></td><td>100</td><td>America</td></tr>

</table>
Run Code Online (Sandbox Code Playgroud)

我想要做的是废弃公司名称及其价格.像这样.

Apple 500 / Samsung 400 / Nokia 300 / HTC 200 / Blackberry 100 
Run Code Online (Sandbox Code Playgroud)

所以,我使用php dom解析器.我知道有很多php解析器插件,但人们说最好使用原始的php解析器.所以我这样编码.

$source_n = file_get_contents($html);
$dom = new DOMDocument();
@$dom->loadHTML($source_n);
$stacks =  $dom->getElementsByTagName('table')->item(0)->textContent;
echo $stacks; 
Run Code Online (Sandbox Code Playgroud)

它将显示许多字符串值....就像这样.

Name Price Country Apple 500 America Samsung 400 Korea ......
Run Code Online (Sandbox Code Playgroud)

这是我认为,没有用的编码,如果我像上面那样编码,我应该使用explode()函数,而且代码会比现在更脏.

我怎样才能更优雅地报废? 有没有简单的参考?

Vir*_*ral 4

使用DOMXPath::query, 首先收集所有名称

$selector = new DOMXPath($dom);

$results = $selector->query('//td/a');

foreach($results as $node) {
    echo $node->nodeValue . PHP_EOL;
}
Run Code Online (Sandbox Code Playgroud)

然后,价格经过改变

$results = $selector->query('//td[2]');
Run Code Online (Sandbox Code Playgroud)

沙盒示例在这里