Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z konwersją xml
Forum PHP.pl > Forum > XML, AJAX
kowalcook
witam serdecznie,
mam mały problem z xmlem, odrazu zaznaczam iz niestety w xml nie jest moją mocną stroną (jeszcze) oraz naprawdę przeszukałem sporo stron, tutorialów i tematów na tym forum jednak nigdzie nie umiałem powiązać informacji z jedną całość, jak ktoś potrafi mi pomóc bardzo bym prosił o precyzyjne opisanie rozwiązania dokładnie krok po kroku wtedy może w końcu to zrozumiem

otóz mam taki oto kod:


plik xml.php
  1. <?php
  2. function Parserowanie($file) {
  3. ini_xml();
  4. $rXMLPARSER = xml_parser_create();
  5. xml_parser_set_option($rXMLPARSER, XML_OPTION_CASE_FOLDING, 1);
  6. xml_set_element_handler($rXMLPARSER, 'start_element', 'close_element');
  7. xml_set_character_data_handler($rXMLPARSER,'character_data');
  8. $fp = fopen($file, 'r');
  9. while($sXmlStream = fread($fp, 4096)) {
  10. if (!xml_parse($rXMLPARSER, $sXmlStream, feof($fp))) {
  11. die('Błąd przy parserowaniu pliku XML');
  12. }
  13. }
  14. fclose($fp);
  15. $aRet['wyniki'] = $GLOBALS['aXmlTotalElements'];
  16. $aRet['infos'] = array('angebote');
  17. return $aRet;
  18. }
  19.  
  20.  
  21.  
  22.  
  23.  
  24. function start_element($parser, $name, $attrs='') {
  25. $name = strtolower(trim($name));
  26. $GLOBALS['sXmlactualElement'] = $name;
  27. if(in_array($name, $GLOBALS[aSpecialElements])) {
  28. $GLOBALS['xmlElementCpt']++;
  29. }
  30. elseif($name == 'DOCUMENT') {
  31. $GLOBALS['aXmlAttrs'] = $attrs;
  32. }
  33. }
  34.  
  35.  
  36.  
  37.  
  38.  
  39. function close_element($parser, $name, $attrs='') {
  40. $name = strtolower(trim($name));
  41. if($name == 'ziel' && $GLOBALS['sXmlactualElement'] != 'file'){
  42. $GLOBALS['xmlElementCpt']++;
  43. }
  44. }
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52. function character_data($parser, $data='') {
  53. if($GLOBALS['sXmlactualElement'] != 'ziel'
  54. && $GLOBALS['sXmlactualElement'] != 'DOCUMENT'
  55. && !in_array($GLOBALS['sXmlactualElement'], $GLOBALS['aSpecialElements']) ) {
  56. $GLOBALS['aXmlTotalElements'][$GLOBALS['xmlElementCpt']][$GLOBALS['sXmlactualElement']].= trim($data);
  57. }
  58. elseif($GLOBALS['sXmlactualElement'] == 'DOCUMENT') {
  59. $GLOBALS['xmlInfos'] = $GLOBALS['aXmlAttrs'];
  60. }
  61. else {
  62. if($GLOBALS['sXmlactualElement'] != 'ziel') {
  63. $GLOBALS['xmlInfos'][$GLOBALS['sXmlactualElement']].= trim($data);
  64. }
  65. }
  66. }
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74. function ini_xml() {
  75. $GLOBALS['aXmlTotalElements'] = array();
  76. $GLOBALS['sXmlactualElement'] = '';
  77. $GLOBALS['xmlElementCpt'] = 0;
  78. $GLOBALS['aXmlAttrs'] = array();
  79. $GLOBALS['xmlInfos'] = array();
  80. $GLOBALS['aSpecialElements'] = array();
  81. }
  82.  
  83. ?>




pobieram plik za pomoca funkcji require_once na stronę w której chce generować dane i tam mam następująco (to jest przykłąd testowy):

  1. <?php
  2. $dLink= "ścieżka_do_linku";
  3. $dArray = Parserowanie($dLink);
  4. $dRes = $dArray['wyniki'];
  5.  $dResw = $dArray['infos'];
  6.  
  7.  
  8. foreach ($dRes as $zapRess) {  
  9. echo "$zapRess[angebote]<br>n"; 
  10. }
  11. ?>






plik xml wygląda następująco (wartości podałem testowe):

  1. <DOCUMENT>
  2.  
  3. <PAGE>page</PAGE>
  4.  
  5. <ANGEBOTE>angebote</ANGEBOTE>
  6.  
  7.  
  8. <ZIEL>
  9. <NAME>jakas nazwa</NAME>
  10. <TYP>typ</TYP>
  11. <REF>ref</REF>
  12. <ANGEBOTE>angebote</ANGEBOTE>
  13. <PREIS>preis</PREIS>
  14. </ZIEL>
  15.  
  16.  
  17.  
  18. <ZIEL>
  19. <NAME>jakas nazwa</NAME>
  20. <TYP>typ</TYP>
  21. <REF>ref</REF>
  22. <ANGEBOTE>angebote</ANGEBOTE>
  23. <PREIS>preis</PREIS>
  24. </ZIEL>
  25.  
  26.  
  27.  
  28. <ZIEL>
  29. <NAME>jakas nazwa</NAME>
  30. <TYP>typ</TYP>
  31. <REF>ref</REF>
  32. <ANGEBOTE>angebote</ANGEBOTE>
  33. <PREIS>preis</PREIS>
  34. </ZIEL>
  35.  
  36. </DOCUMENT>




problem jest następujący jak mogę wywołać w pętli elementy zawarte w tagu "ZIEL" i osobno wywołać bez pętli tagi page i angebote(główny tag)


obecnie generuje mi wyniki w taki sposób że główne-angebote jest automatycznie doklejane do pierwszego wyniku z angebote zawartego w tagu ZIEL: oraz nie wiem jak mam wywołać osobno wartość page i wartość angebote(główny)


bardzo proszę o pomoc co robie źle, lub czego brakuje, oraz jak ew zrobić to poprawnie (krok po kroku)

z góry serdecznie dzięki
kowalcook
my_kel
Polecam zaznajomienie sie z jQuery a szczegolnie z pluginem taconite.
Robisz zapytanie $.get(danexml.php')
Skrypt php wypluwa odpowiedni xml, ktory "sam" sie aktualizuje w odpowiednie pola.
Pozdrawiam
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.