PHP: bir dizi XML veri depolamak nasıl?

4 Cevap php

Aşağıda ile çalışıyorum XML - Daha fazla öğe vardır - bu ilk seti. Nasıl bir dizi bu unsurları alabilirim? PHP'nin SimpleXML vs ile çalışıyorlar ama ben sadece onu yapmak.

<response xmlns:lf="http://api.lemonfree.com/ns/1.0">
  <lf:request_type>listing</lf:request_type> 
  <lf:response_code>0</lf:response_code> 
  <lf:result type="listing" count="10">
    <lf:item id="56832429">
      <lf:attr name="title">Used 2005 Ford Mustang V6 Deluxe</lf:attr> 
      <lf:attr name="year">2005</lf:attr> 
      <lf:attr name="make">FORD</lf:attr> 
      <lf:attr name="model">MUSTANG</lf:attr> 
      <lf:attr name="vin">1ZVFT80N555169501</lf:attr> 
      <lf:attr name="price">12987</lf:attr> 
      <lf:attr name="mileage">42242</lf:attr> 
      <lf:attr name="auction">no</lf:attr> 
      <lf:attr name="city">Grand Rapids</lf:attr> 
      <lf:attr name="state">Michigan</lf:attr> 
      <lf:attr name="image">http://www.lemonfree.com/images/stock_images/thumbnails/2005_38_557_80.jpg</lf:attr> 
      <lf:attr name="link">http://www.lemonfree.com/56832429.html</lf:attr> 
    </lf:item>
    <!-- more items -->
  </lf:result>
</response>

Teşekkürler çocuklar

EDIT: Ben değişkenleri erişmek için kolay ilk öğeler verileri istiyorum, ben PHP için yeni olduğum gibi SimpleXML işe almak için birkaç gün için mücadele ettik, bu yüzden bir dizi manipüle düşündüm yapmak daha kolaydır.

4 Cevap

(: D Evet, bir iki) Belki SimplePie bakmak gerekir, bu XML bir dizi ya da bir nesnenin içine beslemeleri ayrıştırır. Ben ad alanları için iyi çalışır ve çok bağlıyor düşünüyorum.

Bazı faydaları GPL lisansı (ücretsiz) ve destek topluluk bulunmaktadır.

SimpleXML / yazma XML dosyalarını okumak için en iyi yoldur. Orada ilgili XML ad ve o şeyler zorlaştırıyor, çünkü genellikle bu durumlar dışında, dizileri kullanarak kadar kolay. Ayrıca, saklanan nitelikleri için kullanılan biçim tür berbat, bu yüzden yerine kullanımı kolay ve açık olmanın biraz karışık, bu yüzden burada sizin için daha ilginç bir şey yapıyor taşıyabilirsiniz böylece ne arıyorsanız var:

$response = simplexml_load_file($url);

$items = array();
foreach ($response->xpath('//lf:item') as $item)
{
    $id = (string) $item['id'];
    foreach ($item->xpath('lf:attr') as $attr)
    {
        $name = (string) $attr['name'];
        $items[$id][$name] = (string) $attr;
    }
}

Eğer $items dizideki ihtiyacınız olan her şey, print_r() İçinde ne olduğunu görmek için kullanmak gerekir. $url O lemonfree API şey URL olmalıdır. Kod bir öznitelik için birden fazla değer olamaz varsayar (örneğin, birden fazla görüntü.)

İyi şanslar.

Bu benim bir sayfada kullanmak olabilir bu yüzden XML bir diziye bir müşteri e-posta adres defteri sisteminden dönen ayrıştırılan yoludur. PHP parçası olan bir XML ayrıştırıcı kullanır, sanırım.

Burada belgeler var oluyor http://www.php.net/manual/en/ref.xml.php

$user_info = YOUR_XML

SETS $xml_array AS ARRAY
$xml_array = array();

// SETS UP XML PARSER AND PARSES $user_info INTO AN ARRAY
$xml_parser = xml_parser_create();

xml_parse_into_struct($xml_parser, $user_info, $values, $index);

xml_parser_free($xml_parser);

foreach($values as $key => $value)
{
    // $value['level'] relates to the nesting level of a tag, x will need to be a number
    if($value['level']==x)
    {
        $tag_name = $value['tag'];
        // INSERTS DETAILS INTO ARRAY $contact_array SETTING KEY = $tag_name VALUE = value for that tag
        $xml_array[strtolower($tag_name)] = $value['value'];
    }
}

Eğer ($ değerler) var_dump Eğer size bilgi verildi konum ne düzeyde verileri görmek gerekir, ben yukarıdaki XML için 4 olacak düşünüyorum, bu yüzden o zaman değerini değiştirerek istemediğiniz bir şey filtreleyebilirsiniz $ değer ['level'] == istenen seviyeye x yani. $ Değer ['level'] == 4.

Bu = 'Kullanılan 2005 Ford Mustang V6 Deluxe' vb ['title'] $ xml_array ile bir dizi olarak $ xml_array dönmelidir

Bazı umut olur