![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 566 Pomógł: 35 Dołączył: 21.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witajcie!
Szukałem gotowej biblioteki - znalazłem kilka ale albo wolne, albo nie działają jak powinny. Postanowiłem napisać własną, niestety napotkałem problem. O ile samo generowanie XML`a nie sprawia problemu o tyle gdy jego struktura ma być bardziej zagnieżdżona - gubię się. Jeśli chodzi o parsowanie to kompletnie nie wiem jak podejść do problemu. Aby nie zaśmiecać forum pokażę tylko kawałki kodu:
Wywołanie build_call z przykładową tablicą wygeneruje takie coś:
Wszytko było by ok gdyby nie to, że nie mogę zagnieżdżać dalej w drzewie, tzn nie mogę zrobić takiej tablicy: Kod ["method_name"] => "system.listMethods" ["params"]=> array(4) { ["value_0"] => "abcd" ["struct_0"]=> array(2) { ["test"] => array(2) { ["struct_0"] => ["a"] => "b", ["b"] => "c" } ["struct_1"] => ["foo"] => "bar", ["ciocia"] => "ala" } ["test2"] => "lala;]" } } Wiem, że trzeba to jakoś parsować wywołując funkcję samą w sobie a nie zagnieżdżać fory+if = niestety nie wiem jak. ================================================================================ ========== Osobny problem: parsowanie wyniku. Ten sam problem co wcześniej - zagnieżdżenia ![]() W odpowiedzi na zapytanie dostaje takiego XML`a:
I kompletnie nie wiem jak do niego podejść. Dodatkowym ogranicznikiem jest dla mnie standaryzacja wyniku - chciałbym aby wygląd tablicy która zostanie zwrócona pasował do schematu z pierwszego postu. Oczywiście schemat nie jest z góry ustalony - to jak to zrobiłem w funkcji generującej XML to jedyne co przyszło mi sensownie do głowy jeśli chodzi o rzutowanie struktury XML na tablicę wielowymiarową. Czy ktoś dobroduszny mógłby pomóc w tym zagadnieniu? ![]() Ten post edytował kiler129 25.09.2010, 18:13:17 -------------------- flexiCMS v2 [|||||||+--] 75% done
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
1. Dlaczego typu wartości (string, boolean, int) nie podasz jako atrybut dla VALUE, tylko śmiecisz jakimiś dodatkowymi elementami?
2. Generowanie XMLa jako zlepek tekstów to średni pomysł. Masz takie narzędzia jak DOMDocument, więc skorzystaj z nich. 3. Nazwa elementu nie może zawierać kropki (patrz: dateTime.iso8601) 4. Nie mam pojęcia po co w ogóle chcesz jakoś formatować zwracany tekst (wcięcia, nowe linie). Mimo wszystko wspomniany DOMDocument załatwia sprawę, zapewniając formatowanie źródła dokumentu. Popraw powyższe, a rozwiązanie problemu prawdopodobnie znajdzie się samo. Swoją drogą, używanie pojedynczej spacji jako wcięcia to już kompletne zło. Używaj TABa i jeżeli lubisz tak niewyraźne wcięcia ustaw sobie w edytorze by znak ten był wyświetlany jak jedna-dwie spacje. Ten post edytował Crozin 25.09.2010, 18:22:34 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 566 Pomógł: 35 Dołączył: 21.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
1. Dlaczego typu wartości (string, boolean, int) nie podasz jako atrybut dla VALUE, tylko śmiecisz jakimiś dodatkowymi elementami? Powiedzmy, że jestem leniwy i nie chce o to dbać w przyszłości ![]() ![]() 2. Generowanie XMLa jako zlepek tekstów to średni pomysł. Masz takie narzędzia jak DOMDocument, więc skorzystaj z nich. Niestety wymagają PHP5. 3. Nazwa elementu nie może zawierać kropki (patrz: dateTime.iso8601) Jaknajbardziej może - http://www.xmlrpc.com/spec Gdzie zapisano, że nie? Stosowałem już takie w XMLu i działały poprawnie. 4. Nie mam pojęcia po co w ogóle chcesz jakoś formatować zwracany tekst (wcięcia, nowe linie). Mimo wszystko wspomniany DOMDocument załatwia sprawę, zapewniając formatowanie źródła dokumentu. W sumie tylko dla estetyki i czytelności gdyby zaistniałą potrzeba debuggowania. Jeśli to zbyt trudne do wdrożenia to trudno, będzie bez. Popraw powyższe, a rozwiązanie problemu prawdopodobnie znajdzie się samo. Siedzę nad tym od dłuższego czasu i nic. Swoją drogą, używanie pojedynczej spacji jako wcięcia to już kompletne zło. Używaj TABa i jeżeli lubisz tak niewyraźne wcięcia ustaw sobie w edytorze by znak ten był wyświetlany jak jedna-dwie spacje. Właśnie w tym problem, że nie mogę znaleźć tej opcji w moim edytorze. p.s. Co masz na myśli mówiąc o czytelności wcięć? Na pewno czytelne nie jest wcięcie na 300px. Pozdrawiam. -------------------- flexiCMS v2 [|||||||+--] 75% done
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat Powiedzmy, że jestem leniwy i nie chce o to dbać w przyszłości Chcę aby sam skrypt ocenił co to jest Patrząc po Twoich przykładach nie robi tego sam. Chodzi o zamianę:Kod <value><int>123</int></value> NaKod <value type="int">123</value> Co jest dużo bardziej sensownym, poprawnym, a co najważniejsze łatwym w użyciu rozwiązaniem.Cytat Niestety wymagają PHP5. Co z tego? Z tego co widzę, Twój kod też wymaga PHP5.Cytat W sumie tylko dla estetyki i czytelności gdyby zaistniałą potrzeba debuggowania. Przecież każde sensowne narzędzie do debuggowania XMLa (ot, nawet przeglądarka internetowa) Ci go sformatuje.Cytat Właśnie w tym problem, że nie mogę znaleźć tej opcji w moim edytorze. Być może to pora na zmianę edytora w takim razie?Cytat p.s. Co masz na myśli mówiąc o czytelności wcięć? Na pewno czytelne nie jest wcięcie na 300px. Oczywiście, że nie, ale takie na 5 pikseli również. Używaj TABa - ja sobie wyświetlę jako 4 spacje, Ty jako jedną.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 566 Pomógł: 35 Dołączył: 21.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
Jeśli chodzi o sposób zapisu typu danych nie mogę w niego ingerować - tak wymaga specyfikacja XML-RPC.
W którym miejscu mój kod wymaga PHP5? Jeśli chodzi o strict w b64 to mogę to szybko wyłączyć. Na razie faktycznie pracuję na piątce ale docelowo kod musi działać na 4 ... niestety. Co do formatowania XML - masz rację przyznaję. Cytat Być może to pora na zmianę edytora w takim razie? Łatwiej powiedzieć - trudniej zrobić. Gdy używałem Windows moim edytorem był Editpad Pro - gdy przesiadłem się na Macintosha zakupiłem Code (http://www.panic.com/coda/). Muszę głębiej się wczytać w ustawienia. W każdym razie postaram się używać tabów ![]() EDIT: Dla potomnych:
Teraz czy ktoś ma pomysł na parsowanie otrzymanych danych? /kolorafa - może ty? ;]/ Ten post edytował kiler129 26.09.2010, 00:46:11 -------------------- flexiCMS v2 [|||||||+--] 75% done
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
Łałć ;/ .. tak cieżko w dokumentacji sprawdzić co zadziała na php4?? luknij na Przetwarzanie XML i nizej na DOM XML (PHP 4) - poza tym w manualu jest więcej tego - ale ja ze swojej strony polecam funkcje z rodziny DOM
-------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 20:07 |