Как разобрать определенный XML-файл, используя PHP simpleXML - PullRequest
0 голосов
/ 07 ноября 2011

Я знаю, что уже есть много тем о 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 ...????? ?)
{    

}

Как я могу сделать это foreach, чтобы получить данные. Я испробовал все, что знаю, безуспешно.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 07 ноября 2011

Похоже, 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...
0 голосов
/ 07 ноября 2011

Во-первых, вам нужно <?xml version="1.0" encoding="UTF-8"?> в качестве первой строки в вашем XML, иначе это недопустимо.Затем, и это поможет вам отладить все виды вещей в вашей карьере программиста, попробуйте следующую строку:

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

Это даст вам точное расположение объекта, который вы получитеВернемся к вызову * 1007. * Оттуда, поскольку у вас есть визуальное представление макета объекта, вы должны быть в состоянии выяснить, как его анализировать. Кстати, в вашем случае, я думаю, вам нужно сделать что-то вроде:

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