如何使用PHP simpleXML解析特定的xml文件

时间:2011-11-07 19:22:53

标签: php simplexml

我知道有很多关于simpleXML和PHP的主题,但我需要有关特定xml代码的帮助。

<vitrine>
  <canal>Hotwords</canal>

  <product id="0">
    <descricao>MP3 Apple iPod Class...</descricao>
    <loja>ApetreXo.com</loja>

    <preco>&#224; vista R$765,22</preco>
    <urlImagem>http://imagem.domain.com.br/thumbs/ensopado/18/80x80_107156_1.jpg</urlImagem>
    <urlProduto>http://domain.com.br/tr/rd?o=BiY4C2UnHQ0LOWgyGjc3NRFp-</urlProduto>
  </product>

  <product id="1">
    <descricao>TV Sony Bravia 3D LE...</descricao>

    <loja>Fast Shop.com.b...</loja>
    <preco>10 x R$299,90</preco>
    <urlImagem>http://imagem.domain.com.br/thumbs/ensopado/2852/80x80_319373_1.jpg</urlImagem>
    <urlProduto>http://domain.com.br/tr/rd?o=JDEn-</urlProduto>
  </product>

</vitrine>

我需要一个foreach来获取每个“产品”的数据,如下所示:

<?
$feedUrl = 'url to xml file';
$rawFeed = file_get_contents($feedUrl);
$xml = simplexml_load_string($rawFeed);

foreach ($item ...????? ?)
{    

}

我怎样才能获取数据。我没有成功地尝试了所有我知道的事情。

感谢。

2 个答案:

答案 0 :(得分:0)

首先,您需要<?xml version="1.0" encoding="UTF-8"?>作为XML中的第一行,否则它无效。然后,这将帮助您调试编码生涯中的各种事情,尝试这一行:

echo "<pre>".print_r($xml,true)."</pre>";

这将为您提供从simplexml_load_string()调用中获得的对象的确切布局。从那里开始,由于您可以看到对象布局,因此您应该能够弄清楚如何解析它。顺便说一句,在你的情况下,我认为你需要做类似的事情:

foreach($xml->vitrine as $element) {
    // your code goes here
}

答案 1 :(得分:0)

似乎PHP摆脱了空白后的所有内容,因为product id已更改为product。无论如何这里是代码。

<?php
$v = <<<ABC
<vitrine>
  <canal>Hotwords</canal>

  <product id="0">
    <descricao>MP3 Apple iPod Class...</descricao>
    <loja>ApetreXo.com</loja>

    <preco>&#224; vista R$765,22</preco>
    <urlImagem>http://imagem.domain.com.br/thumbs/ensopado/18/80x80_107156_1.jpg</urlImagem>
    <urlProduto>http://domain.com.br/tr/rd?o=BiY4C2UnHQ0LOWgyGjc3NRFp-</urlProduto>
  </product>

  <product id="1">
    <descricao>TV Sony Bravia 3D LE...</descricao>

    <loja>Fast Shop.com.b...</loja>
    <preco>10 x R$299,90</preco>
    <urlImagem>http://imagem.domain.com.br/thumbs/ensopado/2852/80x80_319373_1.jpg</urlImagem>
    <urlProduto>http://domain.com.br/tr/rd?o=JDEn-</urlProduto>
  </product>

</vitrine>
ABC;

$xml = simplexml_load_string($v);
//print_r($xml);

foreach ($xml->product as $c){    
    echo $c->loja; //echoing out value of 'loja'
}

输出

ApetreXo.com
Fast Shop.com.b...