Jak przerobic ponizszy skrypt (parser, ktory przekazuje wartosci z poszczegolnych wezlow pliku xml do tablicy) tak, aby pobieral tylko te wezly w ktorych wystepuje tak <typ_pub>KV</typ_pub>. Plik xml wyglada mniej wiecej tak (uproszczony):

  1. <book id="1212121">
  2.  <tytul>cos tam</tytul>
  3.  <autor>cos tam</tytul>
  4. </book>


a plik php:
  1. <?php
  2.  
  3. include (&#092;"config/pathes.php\");
  4.  
  5. //ZDEFINIOWANIE KLAS, KTÓRE POSŁUŻĄ DO BUDOWY TABLICY ARTUKUŁÓW
  6.  
  7.  class book{
  8. var $indeks;
  9. var $tytul;
  10. var $autorzy;
  11. var $wydawca;
  12. var $oprawa;
  13. var $wydanie;
  14. var $rokwyd;
  15. var $objetosc;
  16. var $isbn;
  17. var $opis;
  18. var $typ_pub;
  19. var $tematyka;
  20.  
  21. function book($id){
  22.  $this -> indeks = $id;
  23.  $this -> autorzy = '';
  24.  $this -> wydawca = '';
  25.  $this -> oprawa = '';
  26.  $this -> wydanie = '';
  27.  $this -> rokwyd = '';
  28.  $this -> objetosc = '';
  29.  $this -> isbn = '';
  30.  $this -> opis = '';
  31.  $this -> typ_pub = '';
  32.  $this -> tematyka = '';
  33.  }
  34. }
  35.  
  36. // $int - ZMIENNA TRZYMAJACA NUMER AKTUALNIE WCZYTYWANEGO ARTYKULU
  37. // $ksiazki - TABLICA ZMIENNYCH
  38. // $czy_book - OKREŚLA CZY AKTUALNIE ZNAJDUJEMY SIE W ZNACZNIKU book
  39.  
  40. $int = 0;
  41. $ksiazki = array();
  42. $czy_book = 0;
  43.  
  44. // FUNKCJA PRZETWARZAJACA OTWARCIE TAGU
  45.  
  46. function tag_start($parser, $attr, $params){
  47. global $act_tag, $int, $ksiazki, $czy_book;
  48. if($attr == 'BOOK' && $czy_book == 1){
  49.  die('Błąd: Niedozwolone zagnieżdżenie ksiazek! :]<br>');
  50. }elseif($attr == 'BOOK' && $czy_book == 0){
  51.  $ksiazki[$int] = new book($params['id']);
  52.  $ksiazki[$int] -> indeks = $params['INDEKS'];
  53.  $czy_book = 1; 
  54. }
  55.  
  56. if($czy_book == 1){
  57.  $act_tag = $attr;
  58. }
  59.  }
  60.  
  61. // FUNKCJA OBROBKI TEKSTU MIEDZY ZNACZNIKAMI
  62.  
  63. function tag_text($parser, $text){
  64. global $act_tag, $int, $ksiazki, $czy_book;
  65.  
  66. if($czy_book == 1){
  67. switch($act_tag){
  68. case 'TYTUL': $ksiazki[$int] -> tytul .= $text; break;
  69. case 'AUTORZY': $ksiazki[$int] -> autorzy .= $text; break;
  70. case 'WYDAWCA': $ksiazki[$int] -> wydawca .= $text; break;
  71. case 'OPRAWA': $ksiazki[$int] -> oprawa .= $text; break;
  72. case 'WYDANIE': $ksiazki[$int] -> wydanie .= $text; break;
  73. case 'ROKWYD': $ksiazki[$int] -> rokwyd .= $text; break;
  74. case 'OBJETOSC': $ksiazki[$int] -> objetosc .= $text; break;
  75. case 'OPIS': $ksiazki[$int] -> opis .= $text; break;
  76. case 'TYP_PUB': $ksiazki[$int] -> typ_pub .= $text; break;
  77. case 'TEMATYKA': $ksiazki[$int] -> tematyka .= $text; break;
  78.  }
  79. }
  80.  }
  81.  
  82. // FUNKCJA OBSŁUGUJĄCA ZAMYKANIE TAGÓW
  83.  
  84.  function tag_end($parser, $attr){
  85. global $act_tag, $int, $czy_book;
  86. if($attr == 'BOOK' && $czy_book == 1){
  87.  $int++;
  88.  $czy_book = 0;
  89. }
  90.  }
  91.  
  92.  
  93. // INICJACJA PARSERA XML
  94.  
  95.  $parser = xml_parser_create();
  96.  
  97.  xml_set_element_handler($parser, 'tag_start', 'tag_end');
  98.  xml_set_character_data_handler($parser, 'tag_text');
  99.  
  100.  if(!($fp = fopen($path_db_books, 'r'))) {
  101. die('Nie można otworzyć podanego pliku XML!!!');
  102.  }
  103.  
  104.  while($data = fread($fp, 4096)) {
  105. if(!xml_parse($parser, $data, feof($fp))){
  106.  die(sprintf(&#092;"Błąd XML: %s w linii %d\",
  107.  xml_error_string(xml_get_error_code($_parser)),
  108.  xml_get_current_line_number($parser)));
  109.  }
  110. }
  111.  xml_parser_free($parser); 
  112.  
  113. ?>