[xml][DOM] sama podstawa |
[xml][DOM] sama podstawa |
8.04.2013, 14:15:55
Post
#1
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 0 Dołączył: 2.06.2011 Ostrzeżenie: (0%) |
Mam kod:
Dopóki nie dodam ostatniej linijki, błędu nie ma. Jeśli tylko dowiem się w czym leży problem, od razu będę mógł iść dalej z tematem. phhpinfo() mówi: DOM/XML enabled DOM/XML API Version 20031129 libxml Version 2.6.26 HTML Support enabled XPath Support enabled XPointer Support enabled Schema Support enabled RelaxNG Support enabled |
|
|
8.04.2013, 14:20:51
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 519 Pomógł: 6307 Dołączył: 27.12.2004 |
Cytat Dopóki nie dodam ostatniej linijki, błędu nie ma. Masz na mysli to:echo $doc; ? Mówisz że dostajesz błąd.... super... a może byś raczył się tym błędem z nami podzielić, czy może oczekujesz wróżenia z fusów? -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
8.04.2013, 17:03:10
Post
#3
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 0 Dołączył: 2.06.2011 Ostrzeżenie: (0%) |
kompletnie wypadło mi z głowy, taki jest błąd:
Catchable fatal error: Object of class DOMDocument could not be converted to string in D:\Programy\WebServ\httpd-users\dom\index.php on line 4 |
|
|
8.04.2013, 17:14:26
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 366 Pomógł: 261 Dołączył: 23.09.2008 Skąd: Bydgoszcz Ostrzeżenie: (0%) |
-------------------- |
|
|
8.04.2013, 17:30:53
Post
#5
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 0 Dołączył: 2.06.2011 Ostrzeżenie: (0%) |
czy macie może linka do jakiegoś poradnika, ale w języku polskim?
może być też temat na tym forum, gdzie ktoś to jakoś objaśnił |
|
|
8.04.2013, 21:24:37
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) |
niestety większość materiałów jest po angielsku... jeśli cokolwiek kumasz to jak najwięcej czytaj i próbuj pisać kod trochę metodą prób i błędów - prędzej i zapamiętasz i zrozumiesz... jednak musisz nauczyć się z grubsza rozumieć bądź po swojemu debugować kod...
jeśli chodzi o DOM to świetne narzędzie - nie wszędzie wygodnie jest korzystać z wyrażeń regularnych a i to nie wszyscy je rozumią... jeśli dokument chcesz odpytywać przez selektory CSS jak w jQuery to w google znajdziesz odpowiednie biblioteki jak PHPQuery itd... ale bez tych bibliotek możesz też skorzystać ze ścieżek XPath (łatwo jest sobie przekształcić selector CSS na wyrażenie XPath) DOMXPath::query -------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
8.04.2013, 23:23:09
Post
#7
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 0 Dołączył: 2.06.2011 Ostrzeżenie: (0%) |
zrobiłem postępy w temacie, ale zatrzymałem się na tym:
Chcę zrobić pętle, aby wybrane pola w konkretnym <category> pokazały się w odpowiedni sposób: id: 1 name: AAA id: 2 name: BBB Wszystko jest ok, ale wartości się nie pokazują Ten post edytował marcinek37 9.04.2013, 00:03:41 |
|
|
9.04.2013, 06:41:31
Post
#8
|
|
Grupa: Moderatorzy Postów: 36 519 Pomógł: 6307 Dołączył: 27.12.2004 |
Cytat Wszystko jest ok, ale wartości się nie pokazują No to skoro się nie pokazują to chyba jednak nie jest ok....Włączy wyświetlanie wszytkich błędów, a dowiesz się czemu się nie pokazują. Temat: Jak poprawnie zada pytanie getElementsByTagName zwraca listę elementów a trudno oczekiwać by lista miała parametr nodeValue. To pojedynczy element ma taki parametr a nie lista -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
9.04.2013, 11:24:13
Post
#9
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 0 Dołączył: 2.06.2011 Ostrzeżenie: (0%) |
Po dodaniu tego kodu pokazują się takie błędy:
Notice: Undefined property: DOMNodeList::$nodeValue in D:\Programy\WebServ\httpd-users\dom\index.php on line 20 Ale jeśli dam ten kod:
to pokazują się wartości, ale wszystkie na raz i nie wiem, jak z tego $category->nodeValue; wziąć konkretne parametry, najpierw id a potem name szukałem na tym forum i w internecie i wszędzie wyszukuje się tylko jedno pole, a ja szukam jednego pola, pod którym są kolejne dwa - i w tym problem |
|
|
9.04.2013, 20:01:30
Post
#10
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) |
u Ciebie brakowało pobranie elementów z listy czyli ->item(0)... foreach sam przeiterował tą listę... poczytaj o podobieństwach XPath do selektorów CSS to na szybki start da Ci wiele możliwości, czytelniejszy i krótszy zapis... ale jak wolisz... przykład dałem z XPath a swój popraw i staraj się czytać błędy ze zrozumieniem, gdyż DOMNodeList nie ma własności nodeValue ;p PS. przy bardzo duuuużych plikach XML i tak będziesz musiał skorzystać z SAX ;] - to dopiero dla Ciebie pewnie będzie hardkor ;] Ten post edytował zegarek84 9.04.2013, 20:45:24 -------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
9.04.2013, 22:49:54
Post
#11
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 0 Dołączył: 2.06.2011 Ostrzeżenie: (0%) |
świetnie, działa!
a powiedz mi, "duże" pliki, tzn. jakie? 10MB? |
|
|
9.04.2013, 23:06:59
Post
#12
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) |
to zależy od ustawień serwera... ale każdy plik wczytywany w całości zawsze w pamięci zajmuje co najmniej tyle, co sam plik, a do tego parsowany w całości obiektami typu DOM znacznie więcej, gdyż na każdy z elementów jest tworzony nowy obiekt...
póki nie będziesz musiał zbyt często otwierać duuużych plików XML to wystarczy zwiększyć pamięć wykonywanego skryptu... ale jeśli pliku już będą naprawdę duże lub mniejsze a duże pliki będziesz musiał otwierać baaaaaaardzo często to już coś z tym będziesz musiał zrobić... pierwsza rzecz, jaka przychodzi większości to czytanie pliku po fragmencie i korzystanie z wyrażeń regularnych (nie polecam - choć polecam znać wyr. reg. ;]), w zasadzie jeśli pliku nie będzie można rozbić i będzie on na prawdę duży to przy niskim zużyciu pamięci można go odczytać poprzez SAX (w google hasło "php SAX"), jednak na razie tego tematu nie ruszaj puki nie potrzebujesz a tym bardziej, jeśli nic nie programowałeś zdarzeniowo... -------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
10.04.2013, 00:51:33
Post
#13
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 0 Dołączył: 2.06.2011 Ostrzeżenie: (0%) |
ok, a masz może jakiegoś linka do jakiegoś poradnika, który krok po kroku wyjaśni DOM?
ale coś innego niż to, co daje manual |
|
|
10.04.2013, 11:48:50
Post
#14
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) |
popisz trochę w JavaScript, korzystaj z narzędzi typu firebug i narzędzi deweloperskich np. w google chrome i przeglądaj drzewo DOM, tam już z musu musisz wszystkie elementy html traktować jako osobny obiekt, a przeglądając drzewo DOM w narzędziach deweloperskich widzisz, jak dokument został wygenerowany itd... DOM to ogólny model obiektowy dokumentu i jest uniwersalny nie ważne, w jakim języku programowania... bardzo modne i wygodne stało się wyszukiwanie elementów DOM po selektorach CSS - stąd m.in. pierwotna popularność jQuery... choć w czystym JS są już metody typu .querySelektorAll...
jednak jeśli po stronie PHP nie chcesz korzystać z musu z zewnętrznych bibliotek wyszukujących po selektorach CSS to musisz poczytać o podobieństwach XPath do selektorów CSS i o konwersji selektorów CSS do XPath, ale jak załapiesz podstawy to zauważysz duże podobieństwo... dodatkowo XPath oferuje Ci więcej niż wyszukiwanie po selektorach CSS operując na dokumencie XML czy ściągniętej parsowanej stronie np. przez CURL... niestety większość materiałów jest po angielsku i tak z kopyta nie przytoczę Ci linków, jedynie daję wskazówki jak spróbować to łyknąć... dodatkowo w manualu PHP jeśli nie bardzo rozumiesz jak z danej funkcji korzystać lub co może być nie tak to warto przejrzeć też komentarze pod daną funkcją... samo pisanie styli CSS też daje spojrzenie jakie elementy zostaną ostylowane, tj. prawie jakbyś szukał te elementy po selektorach CSS... więc możesz trochę pobawić się z "grafiką", ale przecież tym nie musisz się zajmować, jednak da Ci szersze spojrzenie... poczytaj o selektorach CSS3 gdyż jak załapiesz XPath to szybko je też dasz radę przekonwertować - ale to do bardziej zaawansowanego wyszukiwania... pisząc kod HTML staraj się robić odpowiednie wcięcia, domknięcia na tym samym poziomie zagłębienia - będziesz wtedy lepiej w czystym kodzie HTML widział "obiekty" jeśli chodzi o parsowanie stron to wygodny też jest silnik WebKit ale w C++ w Qt - jednak jest to inny język programowania... Ten post edytował zegarek84 10.04.2013, 11:52:54 -------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
10.04.2013, 23:43:23
Post
#15
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 0 Dołączył: 2.06.2011 Ostrzeżenie: (0%) |
1. mam już troszkę rozszerzony kod:
2. $photo1 ściąga dane bezpośrednio z elementu "photo1", w ogóle omija fakt, że jest jeszcze wcześniej w elemencie "photos" - to chyba nieeleganckie, próbowałem wielu metod, aby w kodzie to zapisać, że element "photo1" jest w elemencie "photos", jednak zawsze wyrzucało błędy albo nie pokazywało niczego - jak mogę to ładnie zapisać? 3. element "text" ma kod HTML, który jest od razu kasowany, wyczytałem, że jest potrzebna funkcja DOMinnerHTML jednak przykład z manuala był o wiele prostszy niż ten, dlatego nie potrafię go zastosować - chcę, aby HTML został jedynie w elemencie "text"; tutaj również próbowałem na kilka sposóbów i żaden nie dał efektu... domyślam się, że moje oba problemy to pikuś, ale nie wiem, jak się za to zabrać :/ Ten post edytował marcinek37 10.04.2013, 23:43:36 |
|
|
11.04.2013, 08:56:03
Post
#16
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) |
przede wszystkim zawsze wyświetlaj sobie błędy:
error_reporting(E_ALL|E_STRICT); ini_set('display_errors', '1'); po drugie nie zawsze miałeś elementy których szukałeś
-------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
11.04.2013, 11:11:22
Post
#17
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 0 Dołączył: 2.06.2011 Ostrzeżenie: (0%) |
bardzo Ci dziękuję!
1. specjalnie w drugim przypadku nie dałem wszystkich pól, aby sprawdzić, jak się zachowa skrypt 2. a co z nieeleganckim zapisem? od razu szuka photo1 $oPhoto1 = $category->getElementsByTagName('photo1')->item(0); omijając fakt, że jest w "photos" 3. mógłbyć zapisać mi ten kod w najproszej wersji $id = $oId ? $oId->nodeValue : '';? normalnie w instrukcji warunkowej:
4. i dlaczego jest ten dwukropek na końcu? $oId->nodeValue : ''; 5. naprawdę nie przypominasz sobie jakiegoś prostego poradnika, choćby w języku angielskim? albo jakąś książkę? nie chcę tutaj ciągle pytać o takie bzdety... |
|
|
11.04.2013, 12:58:51
Post
#18
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) |
2. a co z nieeleganckim zapisem? od razu szuka photo1 $oPhoto1 = $category->getElementsByTagName('photo1')->item(0); omijając fakt, że jest w "photos" 3. mógłbyć zapisać mi ten kod w najproszej wersji $id = $oId ? $oId->nodeValue : '';? normalnie w instrukcji warunkowej: ... przeanalizuj poniższy kod 4. i dlaczego jest ten dwukropek na końcu? $oId->nodeValue : ''; brakuje Ci podstaw programowania w dowolnym języku, jest to skrócony zapis przypisania wartości odpowiadający instrukcji if(){$zmienna = ...}else{$zmienna = } 5. naprawdę nie przypominasz sobie jakiegoś prostego poradnika, choćby w języku angielskim? albo jakąś książkę? nie chcę tutaj ciągle pytać o takie bzdety... How to map CSS selectors to XPath queries XPath and CSS Selectors Korzystając z wyrażeń xpath masz większe możliwości i kontrolę wyszukiwanych elementów
-------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
11.04.2013, 15:25:13
Post
#19
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 0 Dołączył: 2.06.2011 Ostrzeżenie: (0%) |
czyli muszę korzystać z DOMDocument oraz DOMXPath, aby elegancko przerobić konkretne dane - bardzo dziękuję
co do tych totalnych podstaw... to fakt, mam duże braki, dlatego czytam książkę z heliona, ale nie ma tam rozdziału o spodobach zapisu kodu, jeśli i w tym temacie masz coś ciekawego do poczytania, zrobię to bardzo chętnie |
|
|
11.04.2013, 17:24:50
Post
#20
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) |
z PHP tak na szybko to przeczytaj sobie np. to:
http://framework.zend.com/manual/1.12/en/c...g-standard.html nie patrz, że to ze strony ZF, na stronie SYMFONY gdzieś była chyba podobna strona... zresztą jak nie wybrałeś jakiegoś FW to i tak kiedyś będziesz musiał ;]... a stosując się do dobrych praktyk nawet jak nie będziesz mógł skorzystać z gotowego FW to bez problemu napiszesz szkielet podstawowy mini FW... jest wiele konwencji zapisu zmiennych, sposobów formatowania kodu... ogólnie musisz próbować do jakiejś się dostosować ale bez przesady... np. zmienne prywatne w prototypach obiektów w JavaScript w zasadzie da się zdefiniować tylko przez konwencję stosując znak podkreślenia na początku _zmienna... choć tą konwencję niektórzy wykorzystują też przy innych językach zważywszy na podpowiadanie kodu przez IDE... nazwy klas powinno zaczynać się dużymi literami, a instancje tych klas z małych już... przy wielu podstawowych zmiennych często pierwsza litera zmiennej może określać typ jak np. $iLat - zmienna typu integer - stąd np. w powyższym kodzie niektóre zmienne poprzedziłem "o" (od obiekt). Jeśli nazwa zmiennej jest wieloczłonowa to należy zdecydować się na jeden ze sposobów zapisu np. moja_dluga_zmienna lub mojaDlugaZmienna szczerze powiedziawszy to musisz kodować - większe projekty wymusza na tobie stosowanie dobrych praktyk, odpowiedniego nazywania zmiennych, wcięć, odpowiedniego ułożenia i nazywania plików do PHP na helionie wielu poleci Ci książkę typu "PHP obiekty wzorce i narzędzia" "PHP object, pattern and practice" 3 edycja (jak możesz to czytaj po ang.), ale nie pamiętam, czy jest tam o formatowaniu kodu, jednak ja też tą pozycję polecam... czytając nowsze pozycje raczej autorzy stosują dobre praktyki... samych książek z formatowaniem kodu to za bardzo nie pamiętam czy są dobre czy nie ale nasuwają mi się 2 pozycje: "Clean Code" "Code Craft - the practice of writing excellent code" -------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
Wersja Lo-Fi | Aktualny czas: 23.09.2024 - 08:06 |