Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [XML] Wyciąganie atrybutów z XML
Forum PHP.pl > Forum > Przedszkole
SSam
  1. <stocks>
  2. <product reference="123456789" name="Product A" size="XXL" stoc="100" box="30">
  3. <regroupments />
  4. <colors>
  5. <color Lang="FR">Bleu</color>
  6. <color Lang="EN">Blue</color>
  7. <color Lang="PL">Niebieski<color>
  8. </colors>
  9. <shipments />
  10. </product>
  11. <product reference="987654321" name="Product B" size="XXXL" stoc="150" box="0">
  12. <regroupments />
  13. <colors>
  14. <color Lang="FR">Corde</color>
  15. <color Lang="EN">Rope</color>
  16. <color Lang="PL">Beżowy<color>
  17. </colors>
  18. <shipments />
  19. </product>
  20. </stocks>


Z powyższego pliku XML muszę wyciągnąć "reference", "name", "size", "stock", "color Lang="PL" i wyświetlić w takiej formie:

  1. Nazwa: [name]
  2. Numer REF: [reference]
  3. Rozmiar: [size]
  4. Kolor: [color Lang="PL"]
  5. Magazyn: [stock]


Efekt:

  1. Nazwa: Product A
  2. Numer REF: 123456789
  3. Rozmiar: XXL
  4. Kolor: Niebieski
  5. Magazyn: 100


Mój dotychczasowy skrypt wygląda następująco:

  1. <?php
  2. $xml = simplexml_load_file('ftp://user:haslo@serverftp.com:port/stock.xml');
  3.  
  4. foreach ($xml->product as $product) {
  5. foreach ($product->attributes() as $atrybut) {
  6. echo $atrybut;
  7. }
  8. foreach ($product->colors as $colors) {
  9. echo $colors->color[6];
  10. echo '<br><br>
  11. -----------------------------------------------';
  12. echo '<br><br>';
  13. }
  14. }
  15.  
  16. echo '<br>';
  17. ?>
  18.  
  19.  


Działa jednak chciałbym aby przypisać każdy atrybut do $ aby potem wrzucić to do bazy danych.
Czyli np. $colors już jest. Potrzebuję zrobić podobnie z $name, $stock, $reference, $size.

Jak to zrobić ?
SSam
A gdybym zamienił TO:

  1. foreach ($product->attributes() as $atrybut) {
  2. echo $atrybut;
  3. }


NA TO:

  1. foreach ($product->attributes() as $atr) {
  2. echo '' . $atr . '<br>';
  3. }


I wywoływał przez $atr wartość atrybutu ? Tylko jak ?
Próbowałem już:

  1. foreach ($product->attributes() as $atr) {
  2. echo '' . $atr->name . '<br>';
  3. }


  1. foreach ($product->attributes() as $atr) {
  2. echo '' . $atr[2] . '<br>';
  3. }


I nic, w obu przypadkach błąd.
nospor
Skad taki pomysł? Myslisz ze jak zmienisz nazwe zmiennej z $atrybut na $atr to nagle możesz z niej inaczej korzystac?? Czemu poprostu nie zajrzyj do manuala?
http://www.php.net/manual/en/simplexmlelement.attributes.php
  1. $string = <<<XML
  2. <a>
  3.  <foo name="one" game="lonely">1</foo>
  4. </a>
  5. XML;
  6.  
  7. $xml = simplexml_load_string($string);
  8. foreach($xml->foo[0]->attributes() as $a => $b) {
  9. echo $a,'="',$b,"\"\n";
  10. }

czyli
as $a => $b
i masz i nazwe i wartosc.
SSam
Chciałem z tego skorzystać ale jak później podepnę to pod bazę ?
Chcę żeby dane każdego produktu były wysyłane do bazy.
Jak użyje $a => $b to jeden produkt nadpisze drugi sad.gif
nospor
No to zapisuj do tablicy, gdzie $a będzie indeksem w tej tablicy a $b wartością. I już. Po to są właśnie tablice.
-Nowy-
Cytat(nospor @ 15.02.2012, 14:02:07 ) *
No to zapisuj do tablicy, gdzie $a będzie indeksem w tej tablicy a $b wartością. I już. Po to są właśnie tablice.


Mam podobny problem ale nie wiem jak zapisać to do tablicy questionmark.gif?
nospor
Lektura obowiązkowa
http://www.php.net/manual/pl/language.types.array.php
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.