Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [xml] parsowanie, pomoc dla poczatkujacego
voytass
post 12.03.2006, 14:59:05
Post #1





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 15.04.2002
Skąd: Warszawa

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


witam,

Jestem poczatkujacy w tematyce XML. chcialbym uzystak kilka rad i wskazowek.
posiadam plik XML o oryginalnej strukturze.
chcialbym wyciagnac dane z XMLa i zrobic input do mysql.
jak to zrobic? czy musze sam napisac parser do takiego oryginalnego XMLa?
czy tez moge skorzystac a jakiegos skryptu, w ktorym sam okreslam z jakich znacznikow mam wyciagac dane?


--------------------
Wojtek@7; Wojtek@ogniwo.net; [Simple Forum - 100% - phpclasses.org]; MCP
Go to the top of the page
+Quote Post
LBO
post 12.03.2006, 15:01:17
Post #2





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


najprosciej: simplexml" title="Zobacz w manualu php" target="_manual
Go to the top of the page
+Quote Post
voytass
post 12.03.2006, 15:25:50
Post #3





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 15.04.2002
Skąd: Warszawa

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


SimpleXML wymaga PHP5 a ja musze to zrobic na PHP4. jest jakis odpowiednik SimpleXML dla PHP4?


--------------------
Wojtek@7; Wojtek@ogniwo.net; [Simple Forum - 100% - phpclasses.org]; MCP
Go to the top of the page
+Quote Post
LBO
post 12.03.2006, 15:31:57
Post #4





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


rozszerzenie DOM" title="Zobacz w manualu php" target="_manual jest wbudowane w jadro php
Go to the top of the page
+Quote Post
voytass
post 12.03.2006, 16:06:49
Post #5





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 15.04.2002
Skąd: Warszawa

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


Tzn. ze zadziała, bo nie wiem jak mam traktowac tą Twoja odpowiedź


--------------------
Wojtek@7; Wojtek@ogniwo.net; [Simple Forum - 100% - phpclasses.org]; MCP
Go to the top of the page
+Quote Post
LBO
post 12.03.2006, 16:09:41
Post #6





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


to znaczy, ze kazda dystrybucja php , obsluguje DOM defaultowo...

edit: sorki za tamten blad, mogl wprowadzic zamieszanie

Ten post edytował LBO 12.03.2006, 17:06:42
Go to the top of the page
+Quote Post
voytass
post 12.03.2006, 16:41:24
Post #7





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 15.04.2002
Skąd: Warszawa

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


tzn. ze musze napisac caly parser sam jesli chce wydobywac wartosc okreslonych znacznikow?

Ten post edytował voytass 13.03.2006, 22:16:28


--------------------
Wojtek@7; Wojtek@ogniwo.net; [Simple Forum - 100% - phpclasses.org]; MCP
Go to the top of the page
+Quote Post
Zbłąkany
post 14.03.2006, 09:27:42
Post #8


Administrator serwera


Grupa: Developerzy
Postów: 521
Pomógł: 13
Dołączył: 2.04.2004
Skąd: 52°24' N 16°56' E

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


Masz do wyboru: DOM XML lub XML Parser jak nie masz dostępu do żadnego z nich to niestety musisz napisać samemu smile.gif


--------------------
Środowisko: Gentoo 2008.0 | Apache | PHP5 | PostgreSQL | MySQL | Postfix
Workstation: Gentoo 2008.0 | Firefox
Thomas Alva Edison: "Aby coś wynaleźć wystarczy odrobina wyobraźni i sterta złomu ..."
Odpowiedź na każde pytanie typu "Jak ...": "Nie da się, to nie PostgreSQL"
Go to the top of the page
+Quote Post
voytass
post 14.03.2006, 09:49:59
Post #9





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 15.04.2002
Skąd: Warszawa

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


witam,

Skorzystam raczej z XML Parser bo DOM mi nie dziala (chyb anie jest wlaczony na moim serwerze - serwer nazwa.pl).
jak powinienem przebudowac ten przykład ponizej, aby móc dodac dane z XML do bazy mysql?
  1. <?php
  2. $file = "data.xml";
  3. $depth = array();
  4.  
  5. function startElement($parser, $name, $attrs)
  6. {
  7.  global $depth;
  8.  for ($i = 0; $i < $depth[$parser]; $i++) {
  9.  echo " ";
  10.  }
  11.  echo "$name\n";
  12.  $depth[$parser]++;
  13. }
  14.  
  15. function endElement($parser, $name)
  16. {
  17.  global $depth;
  18.  $depth[$parser]--;
  19. }
  20.  
  21. $xml_parser = xml_parser_create();
  22. xml_set_element_handler($xml_parser, "startElement", "endElement");
  23. if (!($fp = fopen($file, "r"))) {
  24.  die("could not open XML input");
  25. }
  26.  
  27. while ($data = fread($fp, 4096)) {
  28.  if (!xml_parse($xml_parser, $data, feof($fp))) {
  29.  die(sprintf("XML error: %s at line %d",
  30.  xml_error_string(xml_get_error_code($xml_parser)),
  31.  xml_get_current_line_number($xml_parser)));
  32.  }
  33. }
  34. xml_parser_free($xml_parser);
  35. ?> 



oto XML (jeden rekord - czy jedn aencja - nie wiem czy dobrze to nazwywam)
  1. <?xml version="1.0" encoding="ISO-8859-2"?>
  2. <Transfer>
  3. <AdvData Action="" ID="" ExpDate="" InsDate="">
  4. <ContactData Firma="" RegionId="" City="" Email="" Kategoria=""/>
  5. <Introduction><![CDATA[]]></Introduction>
  6. <Post><![CDATA[]]></Post>
  7. <Subpost><![CDATA[]]></Subpost>
  8. <Description><![CDATA[]]></Description>
  9. <Requirements><![CDATA[]]></Requirements>
  10. <Offer><![CDATA[]]></Offer>
  11. <Procedure><![CDATA[]]></Procedure>
  12. <Address><![CDATA[]]></Address>
  13. <e-mail><![CDATA[]]></e-mail>
  14. <AddInfo><![CDATA[]]></AddInfo>
  15. <JobTitle></JobTitle>
  16. <URL></URL>
  17. </AdvData>
  18. ...i tu kolejny zestaw znaczikjow AdvData i danych..
  19. </Transfer>



prosze o wskazowki i uwagi jak podejsc do tego tematu przenoszenia danych z XMLa do bazy danych.


--------------------
Wojtek@7; Wojtek@ogniwo.net; [Simple Forum - 100% - phpclasses.org]; MCP
Go to the top of the page
+Quote Post
wrzasq
post 14.03.2006, 22:29:26
Post #10





Grupa: Zarejestrowani
Postów: 206
Pomógł: 18
Dołączył: 6.03.2006
Skąd: Szczecin

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


coz, ten przyklad ktory podales jedynie wypisuje dane. musisz stowrzyc mechanizm zapisujacy dane przekazywane do startElement() w odpowiedniej hierarchi - mozesz napisac prosta klase - nazwa znacznika, tablica argumentow i referencja do "dzieci". chociaz to dosc kompleksowe rozwiazanie (jak na XML ktory podales) - jezeli calosc pliku XML wyglada tak jak napisales (czyli nie ma dalszego zagniezdzania) to wystarczy ze stworzysz sobie tablice gdzie dla kazdego elementu (ktory przechwyci ci startElement()) bedziesz zapisywal jego atrybuty (jezeli chcesz zawartosc znacznika rowniez zapisaywc, musisz jeszcze napisac obsluge xml_set_character_data_handler()). i jedynie zwiekszaj indeks tablicy po nastepnym wystapieniu AdvData.

no a nastepnie juz proste zapytania SQL wstawiajac w nie dane zapisane w tablicy (wzglednie obiekcie jesli sie na nie zdecydujesz).

Ten post edytował wrzasq 14.03.2006, 22:31:24


--------------------
Go to the top of the page
+Quote Post
voytass
post 14.03.2006, 22:43:20
Post #11





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 15.04.2002
Skąd: Warszawa

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


witam,

dzieki za naprowadzenie, wlasnie siedze i probuje zrozumiec co to wszystko znaczy co napisales smile.gif czy moglbys podac jakis przyklad?

rozumiem, ze wartosci znaczikow mam zapisywac do tablicy a potem wywolac 'insert' do bazy?

przebudowalem troche skrypt:
  1. <?php
  2. $file = "test.xml";
  3. $map_array = array(
  4.  "BOLD" => "B",
  5.  "EMPHASIS" => "I",
  6.  "LITERAL" => "TT"
  7. );
  8. #$praca = array();
  9.  
  10. function startElement($parser, $name, $attrs)
  11. {
  12.  global $map_array, $praca, $i;
  13.  #if (isset($map_array[$name])) {
  14.  # echo "<$map_array[$name]>";
  15.  #}
  16. if ($name == "ADVDATA"){
  17. $i++;
  18. foreach ($attrs as $key=>$val) {
  19. $praca[$i][$key] = $val;
  20. }
  21. } 
  22. #print $name;
  23. if ($name == "CONTACTDATA"){
  24. foreach ($attrs as $key=>$val) {
  25. $praca[$i][$key] = $val;
  26. }
  27. }
  28. if ($name == "INTRODUCTION"){
  29. $praca[$i][$name] = a jak tutaj?questionmark.gifquestionmark.gif?;
  30. }
  31. if ($name == "POST"){
  32. $praca[$i][$name] = a jak tutaj?questionmark.gifquestionmark.gif?;
  33. }
  34. ...
  35.  
  36. #  print $name."<br/>";
  37. #  print "<pre>";
  38. #  print_r($attrs);
  39. #  print "</pre>";
  40.  
  41. }
  42.  
  43. function endElement($parser, $name)
  44. {
  45.  global $map_array;
  46.  if (isset($map_array[$name])) {
  47.  echo "</$map_array[$name]>";
  48.  }
  49. }
  50.  
  51. function characterData($parser, $data)
  52. {
  53. }
  54.  
  55. $xml_parser = xml_parser_create();
  56. // use case-folding so we are sure to find the tag in $map_array
  57. xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, true);
  58. xml_set_element_handler($xml_parser, "startElement", "endElement");
  59. xml_set_character_data_handler($parser, "characterData")
  60. if (!($fp = fopen($file, "r"))) {
  61.  die("could not open XML input");
  62. }
  63.  
  64. while ($data = fread($fp, 4096)) {
  65.  if (!xml_parse($xml_parser, $data, feof($fp))) {
  66.  die(sprintf("XML error: %s at line %d",
  67.  xml_error_string(xml_get_error_code($xml_parser)),
  68.  xml_get_current_line_number($xml_parser)));
  69.  }
  70. }
  71. xml_parser_free($xml_parser);
  72.  
  73.  print "<pre>";
  74.  print_r($praca);
  75.  print "</pre>";
  76. ?> 


wartosci atrybutow moge zapisac do tablicy $praca
A co z tymi znacznikami ktore nie maja znacznikow jak je wpisac do tablicy $praca?

Ten post edytował voytass 14.03.2006, 23:43:58


--------------------
Wojtek@7; Wojtek@ogniwo.net; [Simple Forum - 100% - phpclasses.org]; MCP
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: 26.04.2024 - 05:40