显示XML文件中的两个元素

时间:2012-01-22 14:54:28

标签: php xml foreach simplexml

可以在以下URL上看到该文件:#

上面的XML文件由两个元素组成,我希望按顺序显示这两个元素,即“产品”和“商品”。

我使用SimpleXML加载XML Feed。

  

$ text = simplexml_load_file('feed.xml');

我也使用foreach来显示文件中的数据

foreach ($text->categories->category->items->product as $product) {}

如何使用for each语句或任何其他方法从XML文件中显示“product”和“offer”?

2 个答案:

答案 0 :(得分:1)

虽然我还没有真正得到你想要获得的东西,但我会发布一些如何通过xPath处理这个XML的例子。

首先选择所有productoffer个节点:

$xml = simplexml_load_file('feed.xml');

// Make sure to register custom namespace
$xml->registerXPathNamespace('ns', 'urn:types.partner.api.url.com');

$products = $xml->xpath('//ns:product');
$offers   = $xml->xpath('//ns:offer');

echo count($products); // Number of all product nodes
echo count($offers); // Number of offer nodes

基本迭代:

foreach ($products as $product) {
    //echo '<pre>'; print_r($product); echo '</pre>';
    echo '<pre>'; echo $product->name . ', ' . $product->minPrice; echo '</pre>';
}

答案 1 :(得分:1)

<items>仅包含<product><offer>元素吗?如果是这样的话:

foreach ($text->categories->category->items->children() as $product_or_offer) {
    // Do something
}

请参阅http://php.net/simplexmlelement.children


如果您想明确获取产品/商品元素,可以使用简单的XPath表达式。

$items = $text->categories->category->items;
$items->registerXPathNamespace('so', 'urn:types.partner.api.url.com');
foreach ($items->xpath('so:offer|so:product') as $product_or_offer) {
    // Do something
}