我有一个带有优惠的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
提前谢谢。
答案 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_title
和deals/deal[1]/deal_image
/deals/deal[2]/deal_title
和deals/deal[2]/deal_image
/deals/deal[3]/deal_title
和deals/deal[3]/deal_image
答案 1 :(得分:0)
我认为你应该这样试试:
/deal/deal_id
代码值/deal[/deal_id="$deal_id"]/deal_title
和/deal[/deal_id="$deal_id"]/deal_image
(使用真实的deal_id)代替$deal_id
你会得到每笔交易的deal_title和deal_image对,并且每个交易都匹配