Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php][xml]Parsowanie xml, Parsowanie bazy xml
Krixus
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 13.02.2008

Ostrzeżenie: (0%)
-----


Witam!
Niestety spotkałem się z problemem, z którym nie potrafię sobie poradzić od 2 dni (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
Posiadam plik xml zawierający dane o powiatach i gminach. Fragment:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <teryt>
  3. <catalog name="TERC" type="all" date="2008-01-01">
  4. <row>
  5. <col name="WOJ">02</col>
  6. <col name="POW">01</col>
  7. <col name="GMI"/>
  8. <col name="RODZ"/>
  9. <col name="NAZWA">Powiat bolesławiecki</col>
  10. <col name="NAZDOD"/>
  11. <col name="STAN_NA">2008-01-01</col>
  12. </row>
  13. <row>
  14. <col name="WOJ">02</col>
  15. <col name="POW">01</col>
  16. <col name="GMI">01</col>
  17. <col name="RODZ">1</col>
  18. <col name="NAZWA">Bolesławiec</col>
  19. <col name="NAZDOD"/>
  20. <col name="STAN_NA">2008-01-01</col>
  21. </row>
  22. ...


Chciałbym, pozyskać z pliku treść pomiędzy "<col name="WOJ">", a "</col>" oraz pomiędzy "<col name="NAZWA">", a "</col>", gdzie "<col name="GMI"/>" jest pusta (nic nie posiada -> wtedy jest to powiat).
Próbowałem 100 różnych metod (wycinanie, simplexml, ...) i zawsze napotkałem na błąd.
Czy ktoś potrafi mi pomóc :?:
Go to the top of the page
+Quote Post
abusiek
post
Post #2





Grupa: Zarejestrowani
Postów: 89
Pomógł: 5
Dołączył: 23.10.2006
Skąd: Gda?sk

Ostrzeżenie: (0%)
-----


Ja bym probowal uzyc x-patha

//row[col[@name='GMI' and text() != '']]

to chyba wybiera wszystkie wiersze ktore maja kolumne o nazwie GMI i jest ona pusta
Go to the top of the page
+Quote Post
Krixus
post
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 13.02.2008

Ostrzeżenie: (0%)
-----


Do samego wypisania owszem, ale potrzebuję to przerzucić do bazy danych. Potrzebuję listę powiatów i gmin do bazy (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
abusiek
post
Post #4





Grupa: Zarejestrowani
Postów: 89
Pomógł: 5
Dołączył: 23.10.2006
Skąd: Gda?sk

Ostrzeżenie: (0%)
-----


hmm... to nie rozumiem w czym problem :/

  1. <?php
  2. $xml = new SimpleXMLElement($xmlString);
  3. foreach($xml->xpath("//row[col[@name='GMI' and text() != '']]") as $row)
  4. {
  5.  foreach($row as $col)
  6.  {
  7. if($col['name'] == 'WOJ')
  8. robisz inserta... itd 
  9.  }
  10. }
  11. ?>


i to zalatwia problem, a jesli ten x-path, ktory podalem nie zadziala to mozna chociazby za pomoca tych foreachy wykumac ze to nie jest gmina

Ten post edytował abusiek 2.03.2008, 23:22:17
Go to the top of the page
+Quote Post
Krixus
post
Post #5





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 13.02.2008

Ostrzeżenie: (0%)
-----


Dzięki - dałem warunek i działa (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Czadus
post
Post #6





Grupa: Zarejestrowani
Postów: 164
Pomógł: 4
Dołączył: 29.08.2008

Ostrzeżenie: (0%)
-----


Witam, a w jaki sposób sparsować cały plik xml?? One zajmują, niektóre oczywiście, 30MB lub 70MB, parsowanie ich i wrzucanie do bazy nawet na rozszerzonych zapytaniach, trwa 1min (30MB), 2:30 (70MB). Testowane lokalnie, czy da się to jakoś radykalnie przyspieszyć(IMG:style_emoticons/default/questionmark.gif) Może ma ktoś jakąś koncepcję, z czego korzystać, w jaki sposób?? Szukam jakby pomysłów na dalsze udoskonalanie skryptu.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 07:53