Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Sax Parser php nieparzyste id
OpsS
post
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 29.01.2017

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


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.  
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
OpsS
post
Post #3





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 29.01.2017

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


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. }
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Toz w startElement miales dorobic do swojgo IFa ELSE i to w else miales zrobic $this->books = null;
No mysl troszke.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
OpsS
post
Post #5





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 29.01.2017

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


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. }
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
OpsS
post
Post #7





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 29.01.2017

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


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. }
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
OpsS
post
Post #9





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 29.01.2017

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


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
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 Aktualny czas: 21.08.2025 - 21:58