这里有简单的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()函数,而且代码会比现在更脏.
我怎样才能更优雅地报废? 有没有简单的参考?
使用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)
沙盒示例在这里