我最近(两周前)开始用 PHP 编码,今天我遇到了一个问题,想知道是否有人可以帮助/指导我。
我正在从 Web 服务获取 xml 数据,并希望如下图所示呈现数据
获取的 XML 如下所示
<pricesheets>
<pricesheet>
<buyinggroupname>China</buyinggroupname>
<categoryname>Category B</categoryname>
<currency>USD</currency>
<discamt>39330.00</discamt>
<productdesc>Product B description</productdesc>
<prdouctId> Product B </productId>
</pricesheet>
<pricesheet>
<buyinggroupname>Asia</buyinggroupname>
<categoryname>Category A</categoryname>
<currency>USD</currency>
<discamt>39330.00</discamt>
<productdesc>Product A description</productdesc>
<prodouctId> Product A </productId>
</pricesheet>
</pricesheets>
我遇到的问题是在 XML 之上解析的最佳方法是什么,以便我可以根据“buyinggroupname”和“categoryname”呈现产品。一旦我知道如何呈现数据,我就可以轻松完成折叠和展开功能。
以下是我为实现我想要的目标所做的事情。但我确信我的代码不是高效且可扩展的。
$xmldata; // XML return by the webservice
$data = simplexml_load_string($xmldata);
$category_A_items = '';
$category_B_items = '';
foreach ($data as $object) {
if($object->categoryname == 'Category A') { // Bad Idea : Hard coded category
$category_A_items .= '<tr><td>'.$object->prdouctId.'</td><td>'. $object->productdesc. '</td><td>'. $object->discamt. '</td></tr>';
}
elseif($object->CATEGORYNAME == 'Category B') { // Bad Idea : Hard coded category
$category_B_items .='<tr><td>'.$object->prdouctId. '</td><td>'. $object->productdesc. '</td><td>'. $object->discamt. '</td></tr>';
}
}
//Render Category A items in table
if(strlen($category_A_items) > 0) {
echo '<h3>CAD</h3>';
echo '<table><tr><th>Product Name</th><th>Description</th><th>Price</th></tr>';
echo $cadItems;
echo '</table>'. PHP_EOL;
}
//Render Category B items in table
if(strlen($category_B_items) > 0) {
echo '<h3>Breast Biopsy</h3>';
echo '<table><tr><th>Product Name</th><th>Description</th><th>Price</th></tr>';
echo $breastBiopsy;
echo '</table>'. PHP_EOL;
}
上面的代码仅根据类别(硬编码)呈现数据。现在有什么更好的方法来做同样的事情,这样我就可以根据“buyingroupname”和“categoryname”呈现数据,而无需在php代码中对这两个值中的任何一个进行硬编码。
提前致谢!