foreach($resultXML->products->children() as $product) {
echo "<p><a href=".$product->{'buy-url'}.">".$product->{'advertiser-name'}." - ".$product->price."</a></p>
<p>".$product->{'description'}."</p>";
}
假设我想要筛选出具有相同标题的那些,并且只显示返回结果中显示的第一个标题。
我没有使用自己的数据库,这完全取决于显示的内容。
答案 0 :(得分:0)
我认为最简单的方法是跟踪数组中的标题,并在每次迭代时检查它。
$titles = array();
foreach($resultXML->products->children() as $product) {
if (in_array($product->title, $titles) continue;
$titles[] = $product->title;
echo "<p><a href=".$product->{'buy-url'}.">".$product->{'advertiser-name'}." - ".$product->price."</a></p>
<p>".$product->{'description'}."</p>";
}
假设标题包含在$product->title
中。你可以通过数组函数做一些更好的事情,但我没有理由让一个简单的问题变得复杂。
答案 1 :(得分:0)
您没有提供任何示例性XML,因此为
提供<?xml version="1.0" encoding="UTF-8"?>
<example>
<products>
<product>
<title>First Product</title>
<advertiser-name>First Name</advertiser-name>
</product>
</products>
<products>
<product>
<title>Second Product</title>
<advertiser-name>First Name</advertiser-name>
</product>
</products>
<products>
<product>
<title>Third Product</title>
<advertiser-name>Second Name</advertiser-name>
</product>
</products>
</example>
您希望获取所有产品元素,其广告客户名称不是所有前面产品元素的广告客户名称。
因此,对于上面的XML,这将是第一个和第三个产品元素。
您可以将其写为XPath表达式:
/*/products/product[not(advertiser-name = preceding::product/advertiser-name)]
并且作为PHP代码:
$xml = simplexml_load_string($buffer);
$expr = '/*/products/product[not(advertiser-name = preceding::product/advertiser-name)]';
foreach ($xml->xpath($expr) as $product) {
echo $product->asXML(), "\n";
}
这会产生以下输出:
<product>
<title>First Product</title>
<advertiser-name>First Name</advertiser-name>
</product>
<product>
<title>Third Product</title>
<advertiser-name>Second Name</advertiser-name>
</product>
因此,对您的问题的一个答案是:只查询您感兴趣的文档中的那些元素.Xath可以用于 SimpleXMLElement 。
相关问题: