Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobranie danych z XML za pomocą PHP i xpath
Forum PHP.pl > Forum > XML, AJAX > XML
AntekB
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
thek
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.
erix
Cytat
rekordów więc ręczne wyławianie odpada
XML poniżej:

A w czym tkwi problem?
AntekB
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
thek
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.
AntekB
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
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-2024 Invision Power Services, Inc.