0

我正在开发一个读取如下数据源的项目:

<?xml version="1.0" encoding="UTF-8"?>
<producten>
  <product>
    <sku><![CDATA[75100192B]]></sku>
    <price><![CDATA[349.00]]></price>
    <old_price><![CDATA[499.00]]></old_price>
    <in_stock><![CDATA[1]]></in_stock>
    <delivery_time><![CDATA[1 - 2 werkdagen]]></delivery_time>
    <manufacturer><![CDATA[Kids River]]></manufacturer>
    <name><![CDATA[Kids River Urban Stroller 3 in 1 Black / Grey  Black Frame]]></name>
    <description><![CDATA[KidsRiver Urban Stroller]]></description>
    <url><![CDATA[http://www.url.com/]]></url>
    <categorie><![CDATA[Kinderwagens]]></categorie>
    <subcategorie><![CDATA[Kinderwagen]]></subcategorie>
    <model><![CDATA[Kids River Urban]]></model>
    <collectiejaar><![CDATA[2011]]></collectiejaar>
    <shipping_price><![CDATA[0.00]]></shipping_price>
    <image><![CDATA[http://www.url.com/image.jpg]]></image>
  </product>
  <product>
    <sku><![CDATA[Joolz Day Silver / Black - 2012]]></sku>
    <price><![CDATA[849.00]]></price>
    <old_price><![CDATA[879.00]]></old_price>
    <in_stock><![CDATA[1]]></in_stock>
    <delivery_time><![CDATA[1 - 2 werkdagen]]></delivery_time>
    <manufacturer><![CDATA[Joolz]]></manufacturer>
    <name><![CDATA[Joolz Day Silver / Black]]></name>
    <description><![CDATA[Joolz Day Compleet.]]></description>
    <url><![CDATA[http://www.url.com/]]></url>
    <categorie><![CDATA[Kinderwagens]]></categorie>
    <subcategorie><![CDATA[Kinderwagen]]></subcategorie>
    <model><![CDATA[Joolz Day]]></model>
    <collectiejaar><![CDATA[2012]]></collectiejaar>
    <shipping_price><![CDATA[0.00]]></shipping_price>
    <image><![CDATA[http://www.url.com/image.jpg]]></image>
  </product>
</producten>

我想做一个循环,可以从这个提要中读取单个产品,所以我做了这样的事情:

// Spin up the SimpleXML parser
$xml_feed = new SimpleXMLElement($feed_data);

$products = $xml_feed->xpath('//producten/product');

foreach ($products as $product)
{
    $name = $product->xpath('./name');
    $price = $product->xpath('price');
    $old_price = $product->xpath('old_price');
    $in_stock = $product->xpath('in_stock');
    $manufacturer = $product->xpath('manufacturer');

    echo print_r( $name);
    echo var_dump((string) $price[0]);
    echo var_dump((string) $old_price[0]);
    echo var_dump((string) $in_stock[0]);
    echo var_dump((string) $manufacturer[0]);
    echo "\r\n";
}

我想知道在使用 XPath 2 次时是否有更好的方法来读取 xml。循环之前的一个和循环内的另一个 XPath。我这样做是因为我希望能够解析各种提要。

我有点担心字段后面的 [0]:$price[0]。

4

1 回答 1

2

“我想知道在使用 XPath 2 次时是否有更好的方法来读取 xml。一个在循环之前,另一个 XPath 在循环内。”

为什么?我看不出有什么问题。

“我有点担心[0]场后:$price[0]。”

xpath()总是返回一个节点列表,即使只有一个节点可供选择。[0]是正确的。


无论如何,由于您使用的是 SimpleXML,您可以编写:

$producten = new SimpleXMLElement($feed_data);

foreach ($producten->product as $product) 
{
  echo $product->price . "\n";
  echo $product->old_price . "\n";
  echo $product->in_stock . "\n";
  echo $product->manufacturer . "\n";
}

http://codepad.org/SDDPBFhn

于 2012-05-24T08:32:40.207 回答