php xpath在xml文件上运行多个查询,然后匹配结果

时间:2012-07-28 20:02:34

标签: php xml xpath

我有一个带有优惠的XML Feed,我需要获取标题和图片。

我使用xpath,这是一个例子:/deals/deal/deal_title(用于交易标题) /deals/deal/deal_image(用于交易图片)

问题是有些交易根本没有设置交易图像所以当我将交易标题与交易图像链接时,我有时会得到错误的图像。

为了追踪问题,我创建了两个独立的阵列:一个带有标题,另一个带有图像。

导致问题的奇怪之处在于,在images数组中,空实例被移动到数组的末尾。

例如,如果我们假设“交易标题2”没有图像而“交易标题3”有图像,则“交易标题3”图像用于“交易标题2”。

使用此链接查看我制作的代码:http://pastebin.com/HEuTJQjZ

有趣的部分来自:$doc = new DOMDocument();

基本上它的作用是执行许多xpath查询以获取标题,图像,价格等,然后将它们添加到数据库中。

问题在交易没有设置标签时开始,因此它只使用下一个值。

我不明白它是如何神奇地将所有空实例移动到底部的。 Xpath不应该对结果进行排序,对吗?

我甚至尝试使用[]运算符来获取特定图像,但没有帮助,因为结果排序错误。

示例Feed:http://www.clickbanner.gr/xml/?xml_type=deals&affiliate_ID=14063

修改

真正的问题是xpath没有按文档顺序排序结果并修改预期的顺序。这是一个错误或某种东西,还是有办法强制结果按文件顺序排序?另见:XPath query result order

提前谢谢。

2 个答案:

答案 0 :(得分:1)

$k区间内为[1, count(/deals/deal)]的任何值评估以下两个XPath表达式:

/deals/deal[$k]/deal_title

deals/deal[$k]/deal_image

通过这种方式,您可以了解是否选择了图像。

例如,如果count(/deals/deal)为3,那么您将评估这些XPath表达式

  • /deals/deal[1]/deal_titledeals/deal[1]/deal_image

  • /deals/deal[2]/deal_titledeals/deal[2]/deal_image

  • /deals/deal[3]/deal_titledeals/deal[3]/deal_image

答案 1 :(得分:0)

我认为你应该这样试试:

  1. 演练/deal/deal_id代码值
  2. 搜索一对代码时:/deal[/deal_id="$deal_id"]/deal_title/deal[/deal_id="$deal_id"]/deal_image(使用真实的deal_id)代替$deal_id
  3. 你会得到每笔交易的deal_title和deal_image对,并且每个交易都匹配