给出表格的一系列元素
<td class="name">Product Name</td>
<td class="price">$10.00</td>
可以使用domdocument()将包含100个名称/价格对的页面解析为100个名称组和100个价格的单独组。但是,如果缺少其中一个价格,您将得到一组100个名称,以及一组99个价格,并且不清楚哪个产品缺少其价格。
使用正则表达式解析名称/价格数据对(使价格可选)可以识别哪个产品缺少价格,因为结果是100对,其中一个具有空价格值。有没有办法使用domdocument()实现这一点,所以没有必要使用正则表达式解析html?
编辑:我尝试了dqhendricks的建议,但我在foreach循环上遇到语法错误,其中包含以下内容
<?php
$html = <<<EOT
<table>
<tr>
<td class="productname">a</td>
<td class="price">1</td>
</tr>
<tr>
<td class="productname">b</td>
<td class="price">2</td>
</tr>
<tr>
<td class="productname">c</td>
<td class="price">3</td>
</tr>
<tr>
<td class="productname">d</td>
<td class="price">4</td>
</tr>
<tr>
<td class="productname">e</td>
<td class="price">5</td>
</tr>
</table>
EOT;
libxml_use_internal_errors(true);
$dom = new DOMDocument();
$dom->loadhtml($html);
$xpath = new DOMXPath($dom);
foreach ($xpath->query('//table/tr/') as $node) {
$name = $node->query('td[@class="productname"]');
$price= $node->query('td[@class="price"]');
}
print_r($node);
?>
答案 0 :(得分:1)
使用这种结构,你不会迭代通过td元素并检查它们的类属性吗?如果一行中有两个名称属性,你知道第一个是缺少价格吗?
你的解析代码在哪里?我想问题就在那里。你只是用xpath来获得产品清单和价格清单或者什么?
现在,如果您的html文档的结构如下:
<tr>
<td class="productname">x</td>
<td class="price">x</td>
</tr>
您需要遍历tr元素并检查其内容,您将很容易知道哪些产品缺少价格。
编辑:
foreach ($xpath->query('//table/tr/') as $node) {
$name = $node->query('td[@class="name"]');
$price= $node->query('td[@class="price"]');
}
反正这样......