Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Sax Parser php nieparzyste id
Forum PHP.pl > Forum > Przedszkole
OpsS
Staram się uzyskać dane z xml o nieparzystej wartości id. Kiedy ustawię żeby id było nieparzyste to owszem jest, ale się dubluje wartości oraz są one z parzystych id. Jak mogę to poprawić?


Poniższy obrazek przedstawia jak wygląda tabela
Zdjęcia

  1. class ksiazka extends SAXParser {
  2.  
  3. public $book_tab = array();
  4. public $books;
  5.  
  6. public function startElement($parser, $name, $attributes) {
  7. $this->tagName = $name;
  8. if ($name == "book" && $attributes['id'] % 2 == 1) {
  9. $this->books = new Books();
  10. $this->books->ID = $attributes['id'];
  11. }
  12. }
  13.  
  14.  
  15. public function characterData($parser, $data) {
  16. if ($this->tagName == "title") {
  17. $this->books->TITLE = $data;
  18. }
  19. }
  20.  
  21. public function endElement($parser, $name) {
  22. $this->tagName = "";
  23. if ($name == "book") {
  24. $this->book_tab[] = $this->books;
  25. }
  26.  
  27. }
  28. }
  29.  
nospor
No przeciez w endElement wkladasz kazda ksiazke po kolei niezaleznie czy to jest parzyste czy nie. Wiec dla parzystych wkladasz ostatnio dodana nieparzysta.

Tam gdzie sprawdzasz czy to jest parzyste czy nie to dla parzystej powinienies przypisac $this->books = null.
A w kodzie endElement dodawac tylko gdy $this->books !== null
OpsS
Niby teraz wyświetla nieparzyste tyle, że nie pokazuje id tylko same nazwy i nie wiem dlaczego dubluje.

  1. public function startElement($parser, $name, $attributes) {
  2. $this->tagName = $name;
  3. if ($name == "book" && $attributes['id'] % 2 == 0) {
  4. $this->books = new Books();
  5. $this->books = null;
  6. $this->books->ID = $this -> $attributes['id'];
  7.  
  8. }
  9. }
  10.  
  11. public function endElement($parser, $name) {
  12. $this->tagName = "";
  13. if($this->books !== null){
  14. if ($name == "book") {
  15. $this->book_tab[] = $this->books;
  16. }
  17. }
  18.  
  19. }
nospor
Toz w startElement miales dorobic do swojgo IFa ELSE i to w else miales zrobic $this->books = null;
No mysl troszke.
OpsS
Jak tak daje to mam takie błędy


Notice: Array to string conversion in C:\xampp\htdocs\parser\books.php on line 61

Notice: Undefined property: ksiazka::$Array in C:\xampp\htdocs\parser\books.php on line 61

Warning: Creating default object from empty value in C:\xampp\htdocs\parser\books.php on line 69


  1. public function startElement($parser, $name, $attributes) {
  2. $this->tagName = $name;
  3. if ($name == "book" && $attributes['id'] % 2 == 1) {
  4. $this->books = new Books();
  5. $this->books->ID = $this -> $attributes['id'];
  6.  
  7. } else
  8. { $this->books = null;}
  9. }
nospor
A skadzes nagle o to
$this -> $attributes['id'];
wytrzasnal ?!

Poza tym wszedzie indziej, zanim bedziesz chcial cos wsadzic do $this->books to masz wpierw sprawdzic czy $this->books nie jest nullem. Sadzilem ze pewne oczywiste rzeczy mozna przemilczec.
OpsS
Niby teraz nazwy wyświetla, ale numerów id nie

  1. public function startElement($parser, $name, $attributes) {
  2. $this->tagName = $name;
  3. if ($name == "book" && $attributes['id'] % 2 == 0) {
  4. $this->books = new Books();
  5. if( $this->books !== null)
  6. {
  7. $this->books->ID = $this -> $attributes['id'];
  8. }else
  9. {
  10. $this->books = null;
  11. }
  12.  
  13. }
  14. }
nospor
Nadal uzywasz
$this -> $attributes['id'];

Przeciez ty masz
$attributes;
a nie
$this->$attributes;

Ile razy mozna to samo powtarzac?

Czemu nagle zmieniles z nieparzystych na parzyste?
Rozumiesz w ogole co robi kod ktory moze napisales?
OpsS
bo to jakoś działa odwrotnie jak mam 2 == 1 to pokazuje parzyste a jak 2 == 0 nieparzyste. Chodzi o to, że jak mam 2 == 1 ok id są nieparzyste ale ich wartości w xmlu pobiera z parzystych

dobra poradziłem sobie można zamknąć. Dzięki za pomoc
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.