Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Pobranie danych z XML za pomocą PHP i xpath
AntekB
post 9.11.2010, 13:05:44
Post #1





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

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


Witam, to mój pierwszy post na tym forum i od razu zwracam się z problemem.
jestem zielony z xpath a powstała nagła potrzeba, bardzo prosze o pomoc.
Problem:

muszę z XML (pobieranego z bazy mysql - zawarte w nim dane konfigurują wtyczkę) wyciągnąć jedną wartość.
Tą wartosćią jest w podanym przykładowym XML`u 111 zawarte w <value index="vDEF">111</value>, mam do przeczesania kilkadzisiąt tysięcy rekordów więc ręczne wyławianie odpada
XML poniżej:


  1. <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
  2. <T3FlexForms>
  3. <data>
  4. <sheet index="mainconfig">
  5. <language index="lDEF">
  6. <field index="addresspool">
  7. <value index="vDEF">111</value>
  8. </field>
  9. <field index="cat_join">
  10. <value index="vDEF">0</value>
  11. </field>
  12. <field index="category">
  13. <value index="vDEF"></value>
  14. </field>
  15. <field index="shownone">
  16. <value index="vDEF">0</value>
  17. </field>
  18. </language>
  19. </sheet>
  20. <sheet index="list">
  21. <language index="lDEF">
  22. <field index="target">
  23. <value index="vDEF"></value>
  24. </field>
  25. <field index="field">
  26. <value index="vDEF">name,title,email,phone,mobile,www,address,city,zip</value>
  27. </field>
  28. <field index="abc">
  29. <value index="vDEF"></value>
  30. </field>
  31. <field index="search">
  32. <value index="vDEF"></value>
  33. </field>
  34. <field index="enablecatchoose">
  35. <value index="vDEF">1</value>
  36. </field>
  37. </language>
  38. </sheet>
  39. <sheet index="detail">
  40. <language index="lDEF">
  41. <field index="target">
  42. <value index="vDEF"></value>
  43. </field>
  44. <field index="field">
  45. <value index="vDEF">name,title,email,phone,mobile,www,address,company,city,zip,country,image,fax</value>
  46. </field>
  47. </language>
  48. </sheet>
  49. <sheet index="googlemap">
  50. <language index="lDEF">
  51. <field index="enable">
  52. <value index="vDEF">1</value>
  53. </field>
  54. <field index="target">
  55. <value index="vDEF">3302</value>
  56. </field>
  57. </language>
  58. </sheet>
  59. <sheet index="powermail">
  60. <language index="lDEF">
  61. <field index="target">
  62. <value index="vDEF"></value>
  63. </field>
  64. </language>
  65. </sheet>
  66. <sheet index="tt_news">
  67. <language index="lDEF">
  68. <field index="contact">
  69. <value index="vDEF">1</value>
  70. </field>
  71. </language>
  72. </sheet>
  73. </data>
  74. </T3FlexForms>


Z góry dziękuję Antek
Go to the top of the page
+Quote Post
thek
post 9.11.2010, 13:28:12
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




To popatrz na ścieżkę winksmiley.jpg
/T3FlexForms/data/sheet[index=mainconfig]/language[index=lDEF]/field[index=addresspool]/value[index=vDEF]
Taka mniej więcej do Twojego 111 prowadzi. Pomyśl, pokombinuj i sprawdź jak dokładnie w XPath zapisać przechodzenie po węzłach z określonymi atrybutami.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
erix
post 9.11.2010, 13:30:18
Post #3





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
rekordów więc ręczne wyławianie odpada
XML poniżej:

A w czym tkwi problem?


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
AntekB
post 9.11.2010, 14:02:55
Post #4





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

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


Cytat(erix @ 9.11.2010, 13:30:18 ) *
A w czym tkwi problem?


smile.gif w tym, że jak pisałem powyżej jestem zielony z xpatha, a musze na szybko pobrać wspominane dane smile.gif


Cytat(thek @ 9.11.2010, 13:28:12 ) *
To popatrz na ścieżkę winksmiley.jpg
/T3FlexForms/data/sheet[index=mainconfig]/language[index=lDEF]/field[index=addresspool]/value[index=vDEF]
Taka mniej więcej do Twojego 111 prowadzi. Pomyśl, pokombinuj i sprawdź jak dokładnie w XPath zapisać przechodzenie po węzłach z określonymi atrybutami.


jak pisałem wyżej jestem zielony z xpatha, więc jak można to troche więcej pomocy bym poprosił.

Takie coś skleciłem ale niestety nic dało. sad.gif

$xml = simplexml_load_string($row[pi_flexform]);
$resxml = $xml->xpath("/T3FlexForms/data/sheet[index=mainconfig]/language[index=lDEF]/field[index=addresspool]/value[index=vDEF]");
print_r ($resxml);

Antek
Go to the top of the page
+Quote Post
thek
post 9.11.2010, 16:03:47
Post #5





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Poczytaj o XPath wpierw zanim zaczniesz od razu robić kopiuj-wklej. To, że podałem Ci składnię która jest już bliska prawidłowego rozwiązania, nie znaczy, że dam Ci gotowca :] Dla Ciebie najistotniejsze teraz jest jak odwoływać się do węzła z atrybutem i jak wskazać ścieżkę od węzła głównego.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
AntekB
post 9.11.2010, 18:16:47
Post #6





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

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


Cytat(thek @ 9.11.2010, 16:03:47 ) *
Poczytaj o XPath wpierw zanim zaczniesz od razu robić kopiuj-wklej. To, że podałem Ci składnię która jest już bliska prawidłowego rozwiązania, nie znaczy, że dam Ci gotowca :] Dla Ciebie najistotniejsze teraz jest jak odwoływać się do węzła z atrybutem i jak wskazać ścieżkę od węzła głównego.


Dzieki za podpowiedź pomogła, problem rozwiązany

$resxml = $xml->xpath("//field[@index='addresspool']/value[@index = 'vDEF']");

Pozdrawiam
Antek
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 09:00