Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: XMLReader parsowanie pliku
Forum PHP.pl > Forum > PHP
beel
Witam,

parsuję plik XML w PHP za pomocą XMLReader i ładnie wszystko wyciągam poza jednym tagiem.

Przykładowo mam plik:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <offers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1">
  3. <group name="books">
  4. <o id="286" url="http://kodeks-net.pl/p/1521/286/ustawa-o-podatkach-i-oplatach-lokalnych-komentarz-z-suplementem-elektronicznym--prawo.html"
  5. price="201.60" avail="1" weight="0" stock="10" set="0">
  6. <cat><![CDATA[PRAWO]]></cat>
  7. <name><![CDATA[Ustawa o podatkach i opłatach lokalnych Komentarz (z suplementem elektronicznym)]]></name>
  8. <imgs><main url="http://kodeks-net.pl/templates/images/thumb/10019/496b435553343.jpg"/></imgs>
  9. <desc><![CDATA[Bardzo praktyczny i niezwykle szczegółowy kome....]]></desc>
  10. <attrs>
  11. <a name="Autor"><![CDATA[ Morawski Wojciech]]></a>
  12. <a name="ISBN"><![CDATA[9788378041214]]></a>
  13. <a name="Ilosc_stron"><![CDATA[]]></a>
  14. <a name="Wydawnictwo"><![CDATA[ODDK - Ośrodek Doradztwa i Doskonalenia Kadr]]></a>
  15. <a name="Rok_wydania"><![CDATA[2013]]></a>
  16. <a name="Oprawa"><![CDATA[Miękka]]></a>
  17. <a name="Format"><![CDATA[B5]]></a>
  18. </attrs>
  19. </o>
  20. </group>
  21. </offers>


Parsuję go w ten sposób:
  1. <HTML>
  2. <HEAD>
  3. <TITLE> XMLReader </TITLE>
  4. </HEAD>
  5. <BODY>
  6. <?
  7.  
  8. $file_in="testowy2.xml";
  9. $file_out="data.csv";
  10.  
  11. $sep="|";
  12. $eol="\n";
  13.  
  14. $fp = fopen($file_out, "w"); // w - kasuje poprzednia zawartosc
  15.  
  16. $reader = new XMLReader();
  17. if (!$reader->open($file_in))
  18. {
  19. die("Failed to open file ".$file_in);
  20. }
  21.  
  22. flock($fp, 2);
  23.  
  24. while($reader->read()) {
  25. if($reader->nodeType == XMLReader::ELEMENT) {
  26. $name = $reader->name;
  27. }
  28.  
  29. if ( $reader->nodeType ==XMLReader::ELEMENT && $reader->name == "o" ) {
  30. fwrite($fp,$reader->getAttribute('id').$sep);
  31. fwrite($fp,$reader->getAttribute('price').$sep);
  32. fwrite($fp,$reader->getAttribute('avail').$sep);
  33. fwrite($fp,$reader->getAttribute('weight').$sep);
  34. fwrite($fp,$reader->getAttribute('stock').$sep);
  35. fwrite($fp,$reader->getAttribute('set').$sep);
  36. }
  37.  
  38. if ( $reader->nodeType ==XMLReader::ELEMENT && $reader->name == "imgs" ) {
  39. fwrite($fp,$reader->readString.$sep);
  40. }
  41.  
  42. if($reader->nodeType == XMLReader::TEXT ||
  43. $reader->nodeType == XMLReader::CDATA)
  44. {
  45. fwrite($fp,$reader->value.$sep);
  46. }
  47.  
  48. if($reader->nodeType == XMLReader::END_ELEMENT &&
  49. $reader->name == 'o')
  50. {
  51. fwrite($fp,$eol);
  52. }
  53. }
  54. $reader->close();
  55.  
  56. flock($fp, 3);
  57. fclose($fp);
  58.  
  59. ?>
  60. </BODY>
  61. </HTML>


Niestety nie wiem jak wyciągnąć URL z (tag w tagu):
  1. <imgs><main url="http://kodeks-net.pl/templates/images/thumb/10019/496b435553343.jpg"/></imgs>

Proszę o pomoc.
AlexDeLarge
Może w 39. linii:
  1. <?php
  2. $url = $reader->expand()->firstChild->attributes->getNamedItem('url')->nodeValue;


smile.gif
beel
Cytat(AlexDeLarge @ 1.02.2014, 20:56:15 ) *
Może w 39. linii:
  1. <?php
  2. $url = $reader->expand()->firstChild->attributes->getNamedItem('url')->nodeValue;


smile.gif

Niestety nie. Wystarczyło:
  1. if ( $reader->nodeType ==XMLReader::ELEMENT && $reader->name == "main" ) {
  2. fwrite($fp,$reader->getAttribute('url').$sep);
  3. }
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.