当XML有变量时,PHP解析XML问题

时间:2011-09-30 19:09:58

标签: php xml xml-parsing

请参阅下面的XML文件片段:

<products>
<product>
<id>2589527</id>
<name>Samsung PS42C450</name>
<manufacturer>Samsung</manufacturer>
<manufacturer-id>22</manufacturer-id>
<description>42 in, Widescreen, Plasma, HD Ready, Samsung DNIe+ ,</description>
<category>Sound and Vision &gt; Vision &gt; TVs</category>
<category-id>2</category-id>
<number-of-retailers>16</number-of-retailers>
<image-url height="217" width="300">http://images.pricerunner.com/product/300x217/101294172/Samsung-PS42C450.jpg</image-url>
<rating type="average">
  <average>4,1</average>
</rating>
<rating type="professional">
  <average>4,1</average>
  <num-ratings>1</num-ratings>
</rating>
<lowest-price currency="GBP">354.44</lowest-price>
<highest-price currency="GBP">549.00</highest-price>
</product>
</products>

我在解析image-url,价格最低和价格最高

方面遇到了问题

我正在尝试:

$lowprice = $products->lowest-price;

$highprice = $products->highest-price;

$imageURL = $products->image-url;

但他们什么也没有回来 - 任何想法我做错了什么?

4 个答案:

答案 0 :(得分:1)

使用$ products-&gt; {'最低价'}。 (使用花括号,你可以使用特殊字符,如减号)

晒。

答案 1 :(得分:1)

$products->lowest-price;

PHP将解释为

($products->lowest)  minus price;

$ products对象中没有“最低”,price几乎肯定不是定义的常量,因此两者都显示为null,转换为0,最终生成0-0=0 < / p>

答案 2 :(得分:0)

这可能是因为破折号(假设其他属性有效)。尝试使用大括号封装它们,例如

$products->{highest-price};

答案 3 :(得分:0)

有(可能)两个无关的问题。

<强> 1。 XML结构

您的(破损)代码,例如$products->lowest-price 希望访问lowest-price元素,该元素是$products的子元素。假设变量以元素命名,您还有一些工作要做。 XML的结构类似于

<products>
 └─ <product>
     └─ <lowest-price>

所以如果$products是`产品&gt;元素,然后需要三个步骤。

$products->product->lowest-price

以上可能是一个非问题,而且简直是不幸的变量命名。

<强> 2。元素名称中的短划线( - )

当出现$a->b-c时,PHP认为$a->b <minus> cb-c不是有效标签(并且没有有效的对象属性名称)。正如“SimpleXML Basic用法”手册页(link)中所述,适当的解决方案是使用变量属性语法ala。

$products->product->{'lowest-price'}

请参阅:http://php.net/simplexml.examples-basic(示例#3)