Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [XML] i [php] Eksport z wielu plików XML do tabeli MySQL.
Forum PHP.pl > Forum > XML, AJAX > XML
ZooMaS
Witam, mam następujący problem, otórz jestem kompletnie zielony w XML i troszke mniej zielony w php oraz mysql i muszę wykonać konwersje bazy danych z xml do mysql. Wygląda to tak, że mam około 2000 plików xmp, każdy z nich zawiera dane o jednym kliencie (Data rejestracji, Imię i Nazwisko, Firma, 4 linie adresu, kod pocztowy, email, telefon, 2 linie czy chce dostawać subskrypcje czyli yes/no, oraz info gdzie o nas usłyszał) i potrzebuję to przerzucić do bazy danych mysql, a nie uśmiecha mi się ręcznie linia po linie tego robić używając Navicata na przykład. Czy mógłybm po prosić, któregoś z bardziej doświadczonych kolegów o napisanie dla mnie skryptu czytającego te dane?

  1. <?php
  2.  
  3. $sql = mysql_connect(localhost, root, admin);
  4.  
  5. $a=1000;
  6. while($a<2171)
  7. {
  8.  
  9. $doc = DOMDocument::load('xml/subscriber','$a','.xml');
  10. $xpath = new DOMXPath($doc);
  11. $subscribers = $xpath->query('SubscriberRecord');
  12. foreach($subscribers as $SubscriberRecord) {
  13. $query = 'INSERT INTO subscribers SET
  14. `id` = ' . $xpath->query('id/text()', $subscriber)->item(0) . '
  15. `date` = ' . mysql_real_escape_string($xpath->query('date/text()', $subscriber)->item(0)) . '
  16. `name` = ' . mysql_real_escape_string($xpath->query('name/text()', $subscriber)->item(0)) . '
  17. `company` = ' . mysql_real_escape_string($xpath->query('company/text()', $subscriber)->item(0)) . '
  18. `AddresLine1` = ' . mysql_real_escape_string($xpath->query('AddresLine1/text()', $subscriber)->item(0)) . '
  19. `AddresLine2` = ' . mysql_real_escape_string($xpath->query('AddresLine2/text()', $subscriber)->item(0)) . '
  20. `AddresLine3` = ' . mysql_real_escape_string($xpath->query('AddresLine3/text()', $subscriber)->item(0)) . '
  21. `AddresLine4` = ' . mysql_real_escape_string($xpath->query('AddresLine4/text()', $subscriber)->item(0)) . '
  22. `PostCode` = ' . mysql_real_escape_string($xpath->query('PostCode/text()', $subscriber)->item(0)) . '
  23. `email` = ' . mysql_real_escape_string($xpath->query('email/text()', $subscriber)->item(0)) . '
  24. `DayTimeTel` = ' . mysql_real_escape_string($xpath->query('DayTimeTel/text()', $subscriber)->item(0)) . '
  25. `SubscribeComputerDR` = ' . mysql_real_escape_string($xpath->query('SubscribeComputerDR/text()', $subscriber)->item(0)) . '
  26. `SubscribeCBC` = ' . mysql_real_escape_string($xpath->query('SubscribeCBC/text()', $subscriber)->item(0)) . '
  27. `HearAboutUs` = ' . mysql_real_escape_string($xpath->query('name/text()', $subscriber)->item(0)) . '
  28. $sql->query($query);
  29. }
  30.  
  31. $a++;
  32. }
  33.  
  34. mysql_close{$sql};
  35.  
  36. ?>


zmontowałem coś takiego ale niestety pojawia się błąd:
Parse error: parse error, unexpected $end in C:\Program Files\xampp\htdocs\xml to mysql.php on line 37.


Poniżej wklejam plik pierwszy plik XML z którego chciałbym importować dane (nazwa subscriber1000.xml, ostatni plik ma numer 2171):
  1. <?xml version="1.0"?>
  2. <SubscriberRecord>
  3. <SubscriptionDate>
  4. <Date>06/19/03</Date>
  5. </SubscriptionDate>
  6. <Contact index="1">
  7. <Name>John Wesley</Name>
  8. <Company>Unlimited LTD</Company>
  9. <AddressLine1>1 Abbots Close</AddressLine1>
  10. <AddressLine2>Avenue</AddressLine2>
  11. <AddressLine3>Leicester</AddressLine3>
  12. <AddressLine4>UK</AddressLine4>
  13. <Postcode>LE5 1EH</Postcode>
  14. <EmailAddress>ja_wesley@yahoo.co.uk</EmailAddress>
  15. <DayTimeTel>0116 2745609</DayTimeTel>
  16. </Contact>
  17. <Options>
  18. <SubscribeComputerDR>Yes</SubscribeComputerDR>
  19. <SubscribeCBC>Yes</SubscribeCBC>
  20. </Options>
  21. <Feedback>
  22. <HearAboutUs>radio</HearAboutUs>
  23. </Feedback>
  24. </SubscriberRecord>


Czy ktoś byłby w stanie mi pomóc? Z góry dziękuje.
nospor
Robiles ciagle copy - paste i ostatnia linie zamiast zakonczyc tak:
;
to konczysz tak:
. '

No nawet kolorowanie pokazuje ze jest blad....

Do reszty sie nie odnosze
ZooMaS
Rzeczywiście smile.gif no cóż.. praca po nocach i jej rezultaty..
  1. <?php
  2.  
  3. $sql = mysql_connect(localhost, root, admin);
  4.  
  5. $a=1000;
  6. while($a<1015)
  7. {
  8.  
  9. $doc = DOMDocument::load('xml/subscriber','$a','.xml');
  10. $xpath = new DOMXPath($doc);
  11. $subscribers = $xpath->query('SubscriberRecord');
  12. foreach($subscribers as $SubscriberRecord) {
  13. $query = 'INSERT INTO subscribers SET
  14. `id` = ' . $xpath->query('id/text()', $subscriber)->item(0) . '
  15. `date` = ' . mysql_real_escape_string($xpath->query('date/text()', $subscriber)->item(0)) . '
  16. `name` = ' . mysql_real_escape_string($xpath->query('name/text()', $subscriber)->item(0)) . '
  17. `company` = ' . mysql_real_escape_string($xpath->query('company/text()', $subscriber)->item(0)) . '
  18. `AddresLine1` = ' . mysql_real_escape_string($xpath->query('AddresLine1/text()', $subscriber)->item(0)) . '
  19. `AddresLine2` = ' . mysql_real_escape_string($xpath->query('AddresLine2/text()', $subscriber)->item(0)) . '
  20. `AddresLine3` = ' . mysql_real_escape_string($xpath->query('AddresLine3/text()', $subscriber)->item(0)) . '
  21. `AddresLine4` = ' . mysql_real_escape_string($xpath->query('AddresLine4/text()', $subscriber)->item(0)) . '
  22. `PostCode` = ' . mysql_real_escape_string($xpath->query('PostCode/text()', $subscriber)->item(0)) . '
  23. `email` = ' . mysql_real_escape_string($xpath->query('email/text()', $subscriber)->item(0)) . '
  24. `DayTimeTel` = ' . mysql_real_escape_string($xpath->query('DayTimeTel/text()', $subscriber)->item(0)) . '
  25. `SubscribeComputerDR` = ' . mysql_real_escape_string($xpath->query('SubscribeComputerDR/text()', $subscriber)->item(0)) . '
  26. `SubscribeCBC` = ' . mysql_real_escape_string($xpath->query('SubscribeCBC/text()', $subscriber)->item(0)) . '
  27. `HearAboutUs` = ' . mysql_real_escape_string($xpath->query('name/text()', $subscriber)->item(0));
  28. $sql->query($query);
  29. }
  30.  
  31. $a++;
  32. }
  33.  
  34.  
  35. ?>


ale po zamienieniu . ' na ; pojawia się błąd:

Parse error: parse error, unexpected '{' in C:\Program Files\xampp\htdocs\xml to mysql.php on line 35

Co tym razem?
nospor
no ale: mysql_close{$sql};
od kiedy to { sluza do metod?
mysql_close($sql);

Jak dostaniesz po tej poprawce blad, to spojrz na linie i szukaj bledu w jej otoczeniu.
ZooMaS
  1. <?php
  2. $doc = DOMDocument::load('xml/subscriber'$a'.xml');
  3. ?>


Parse error: parse error, unexpected T_VARIABLE in C:\Program Files\xampp\htdocs\xml to mysql.php on line 10

Jak wstawić tą zmienną jako numer pliku? Próbowałem pare kombinacji ale cały czas błąd w lini 10, któa jest powyżej..

problem polega na tym, że uczyłem się tylko turobo pascala, a php troszke inaczej działa i nieraz nie widze po prostu błędów, tak jak wyżej z tym nawiasem.. no cóż, to dopiero moje początki, także dzięki za wyrozumiałość smile.gif
bim2
Może zacznij od poradnika php
  1. <?php
  2. $doc = DOMDocument::load('xml/subscriber'.$a.'.xml');
  3. ?>
ZooMaS
no właśnie przebrnąłem przez pare, ale nie widziałem nigdzie tej delkaracji plików ze zmienną, w sumie to myślałem że przecinkiem się oddziela, a nie kropką i stąd były problemy smile.gif byłbyś w stanie może mi polecić jakiś dobry kurs? ładnie opisany i z przykładowymi plikami opisanymi w kursie, byłbym bardzo wdzięczny.

no właśnie przebrnąłem przez pare, ale nie widziałem nigdzie tej delkaracji plików ze zmienną, w sumie to myślałem że przecinkiem się oddziela, a nie kropką i stąd były problemy smile.gif byłbyś w stanie może mi polecić jakiś dobry kurs? ładnie opisany i z przykładowymi plikami opisanymi w kursie, byłbym bardzo wdzięczny.

PS działa, tzn nie wywaliło błędu smile.gif Teraz jedyny problem polega na tym... że w bazie danych nie pojawiły się wpisy :/

Przejrzałem chyba wszystko co było dla mnie zrozumiałe, przetestowałem kod na tyle na ile się dało.. ale cały czas nie działa, czy jest ktoś z was w stanie powiedzieć mi dlaczego ten skrypt może nie działać? Sprawdzałem działanie poszczególnych koment w dokumentacji, ale niestety nie wszystko do końca rozumiem więc nie jestem w stanie wykryć ewentualnego błędu. Z tego co wytestowałem to wynika, że problem leży w samym otwarciu i przeczytaniu pliku - coś nie działa tak jak bym chciał, żeby działało.

  1. <?php
  2.  
  3. $sql = mysql_connect(localhost, root, admin);
  4.  
  5. $a=1000;
  6. while($a<1015)
  7. {
  8.  
  9. $doc = DOMDocument::load('xml/subscriber'.$a.'.xml');
  10. $xpath = new DOMXPath($doc);
  11. $subscribers = $xpath->query('SubscriberRecord');
  12. foreach($subscribers as $SubscriberRecord) {
  13. $query = 'INSERT INTO subscribers SET
  14. `date` = ' . mysql_real_escape_string($xpath->query('Date/text()', $subscriber)->item(0)) . '
  15. `name` = ' . mysql_real_escape_string($xpath->query('Name/text()', $subscriber)->item(0)) . '
  16. `company` = ' . mysql_real_escape_string($xpath->query('Company/text()', $subscriber)->item(0)) . '
  17. `AddresLine1` = ' . mysql_real_escape_string($xpath->query('AddresLine1/text()', $subscriber)->item(0)) . '
  18. `AddresLine2` = ' . mysql_real_escape_string($xpath->query('AddresLine2/text()', $subscriber)->item(0)) . '
  19. `AddresLine3` = ' . mysql_real_escape_string($xpath->query('AddresLine3/text()', $subscriber)->item(0)) . '
  20. `AddresLine4` = ' . mysql_real_escape_string($xpath->query('AddresLine4/text()', $subscriber)->item(0)) . '
  21. `PostCode` = ' . mysql_real_escape_string($xpath->query('PostCode/text()', $subscriber)->item(0)) . '
  22. `email` = ' . mysql_real_escape_string($xpath->query('EmailAddress/text()', $subscriber)->item(0)) . '
  23. `DayTimeTel` = ' . mysql_real_escape_string($xpath->query('DayTimeTel/text()', $subscriber)->item(0)) . '
  24. `SubscribeComputerDR` = ' . mysql_real_escape_string($xpath->query('SubscribeComputerDR/text()', $subscriber)->item(0)) . '
  25. `SubscribeCBC` = ' . mysql_real_escape_string($xpath->query('SubscribeCBC/text()', $subscriber)->item(0)) . '
  26. `HearAboutUs` = ' . mysql_real_escape_string($xpath->query('name/text()', $subscriber)->item(0));
  27. $sql->query($query);
  28.  
  29. }
  30.  
  31. $a++;
  32.  
  33. }
  34.  
  35. ?>
Martin24
Może ja się nie znam, ale gdzie jest zdefiniowana zmienna $subscriber? Ja mam podobny problem i też szukam rozwiązania.
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.