1
給出了一系列形式如何使用domdocument處理數據完整性問題?
<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);
?>
我用'$ product_names_nodeList = $ xpath->查詢解析('//表/ TR/TD [@類= 「name」]');'和'$ prices_nodeList = $ xpath-> query('// table/tr/td [@ class =「price」]');'所以我最終得到了兩個nodeLists。然後,我將它們組合成一個名稱/價格對的數組,但如果名稱/價格的總數不匹配,則這不起作用。 (即使這樣做,這可能意味着某個產品缺少一個名稱,而另一個產品缺少價格)。如果有一種方法可以將兩種類型的數據解析在一起(就像使用正則表達式一樣),那絕對是我想要的。 – jela
@jela是啊有。見上面編輯。 – dqhendricks
謝謝,正是我想要的 – jela