![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 117 Pomógł: 0 Dołączył: 24.05.2004 Skąd: krakow Ostrzeżenie: (10%) ![]() ![]() |
wiec mam taki format pliku test.xml:
chodzi mi o to jak zdefiniowac przestrzen nazw dla przypadku: <bibtex:entry bibtex:id="11/2002"> ? Chce za pomoca funkcji simplexml_load_file(); uzyskac wszystkie dane z pliku xml i oczywiscie miec mozliwosc operowania na nich. Probowalem czegos takiego:
I to i inne proby nie dzialaja, czy ktos potrafi mi pomoc?? pozdr;) Ten post edytował morrison 2.09.2005, 15:25:22 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Przyjaciele php.pl Postów: 742 Pomógł: 0 Dołączył: 14.12.2003 Skąd: Gdańsk, Trójmiasto Ostrzeżenie: (0%) ![]() ![]() |
do XMLa służy tag [xml]
prosze poprawic |
|
|
![]() ![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 569 Pomógł: 0 Dołączył: 17.08.2003 Skąd: Dąbrowa Górnicza Ostrzeżenie: (0%) ![]() ![]() |
jesli chodzi o uzywanie namespace w xml to poprawiony kod xml wyglada tak
Dodanie enty jest wymagane poniewaz xml powinien miec oczywiscie swoj root w drzewie a tutaj jest tym <entry> ... </entry> a zamiast twojego
powinna byc jakas definicja namespace dla xml czyli przeksztalcamy to na
lub
U mnie bynajmniej dziala (IMG:http://forum.php.pl/style_emoticons/default/Rkingsmiley.png) |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 117 Pomógł: 0 Dołączył: 24.05.2004 Skąd: krakow Ostrzeżenie: (10%) ![]() ![]() |
wiec jesli chodzi o skladnie pliku XML to mam ja powiedzmy narzucona i nie wiem jeszcze czy bedzie mogla miec ona taka postac jak zaproponowales. Ale biorac pod uwage ze moze byc, probowalem Twojej rady, jednak bez rezultatow. Jesli twierdzisz ze Ci to dziala to prosze zamiesc kod php, ktory wyswietla jakies dane z pliku XML za pomoca omawianej funkcji.
Ja w swoich probach uzyskiwalem: albo pusty bialy ekran, albo blad: Warning: Invalid argument supplied for foreach() in example.php on line 3 bede wdzieczny za pomoc pozdr;) |
|
|
![]() ![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 569 Pomógł: 0 Dołączył: 17.08.2003 Skąd: Dąbrowa Górnicza Ostrzeżenie: (0%) ![]() ![]() |
To jest zywcem z manuala php
to jest plik test.xml z moimi poprawkami
a tak wyglada wynik u mnie Kod object(SimpleXMLElement)[1] public 'entry' => array 0 => object(SimpleXMLElement)[2] public 'inproceedings' => object(SimpleXMLElement)[4] public 'author' => 'Kubus' public 'title' => 'architecture' public 'booktitle' => 'Optical Internet' public 'address' => 'Poznan' public 'year' => '2002' public 'publisher' => 'wyd' public 'pages' => '221-233' 1 => object(SimpleXMLElement)[3] public 'inproceedings' => object(SimpleXMLElement)[5] public 'author' => 'Mazur' public 'title' => 'klaster' public 'booktitle' => 'Aprilll' public 'address' => 'Poznan' public 'year' => '2002' public 'publisher' => 'Instytut' public 'pages' => '113-122' jesli skozystalbym z twojego pliku xml otrzymuje nastepujace bledy Cytat Warning: test.xml:2: namespace error : Namespace prefix bibtex for id on entry is not defined in D:\backup\test.php on line 6 Moze to cos pomoze. Z bledu wynika ze musialbys zdefinipowac prefix dla namespace, ale niestety nie do konca kojaze o co tu moze chodzic. Powodzenia dalej. W razie pytan pisz (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Chyba zrobie sobie specjalizacje w xmlu (IMG:http://forum.php.pl/style_emoticons/default/Rkingsmiley.png) |
|
|
![]()
Post
#6
|
|
Administrator PHPedia.pl Grupa: Developerzy Postów: 1 102 Pomógł: 2 Dołączył: 14.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
Zdefiniować czyli zawrzeć definicji w <entry>
Czyli coś mniej więcej takiego <entry xmlns:bibtex="http://adres/specyfikacji"> Pisane z głowy, do sprawdzenia. |
|
|
![]() ![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 569 Pomógł: 0 Dołączył: 17.08.2003 Skąd: Dąbrowa Górnicza Ostrzeżenie: (0%) ![]() ![]() |
No patrz o tym zapomnialem, a w robocie mialem ostatnio podobnie.
teraz to wygada to tak
Dziala, ale tak czy tak musisz modyfikowac otrzymywany plik. |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 117 Pomógł: 0 Dołączył: 24.05.2004 Skąd: krakow Ostrzeżenie: (10%) ![]() ![]() |
dzieki za podpowiedzi:) dzialac dziala, nawet tak jak napisalem w prosbie-wybiera wszystkie dane. Ale dokladniej to chce uzyskac cos takiego ze: mam w pliku xml powiedzmy 1000 pozycji "inproceedings" i innych i uzytkownik w systemie wybiera sobie np, ze chce zobaczyc 545tą pozycję z pliku. Wiec wowczas musze wykonac takie "zapytanie" by uzyskac wlasnie ta pozycje z pliku. I to jest moj glowny problem: jak wybrac z tego pliku wlasnie okreslona pozycje, albo np wybrane dwa atrybuty z niej: author i title? w pierwszej mojej wiadomosci w tym temacie napisalem petle foreach do wypisania authora, ale to nie dziala. potrzebuje rozwiazanie ktore bedzie w latwy sposob wydostawac te dane z pliku(sama wartosc danego pola, bez zadnych nawiasow i cudzyslowow).
pozdr Ten post edytował morrison 6.09.2005, 20:52:52 |
|
|
![]()
Post
#9
|
|
Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
Simplexml a potem zastosuj na tym xpatha.
Cytat SimpleXMLElement->xpath -- Runs Xpath query on XML data --Manual
Description array SimpleXMLElement->xpath ( string path ) The xpath method searches the SimpleXML node for children matching the Xpath path. It always returns an array of SimpleXMLElement objects. |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 117 Pomógł: 0 Dołączył: 24.05.2004 Skąd: krakow Ostrzeżenie: (10%) ![]() ![]() |
niestety zaimplementowac cos jest trudniej niz wymyslic koncepcje. Juz probowalem xpath'a wczesniej(wielu rzeczy probowalem, mam nawet klasy ktore pieknie wypisuja zawartosc ktoregokolwiek z elementow-ale problem zaczyna sie gdy w pliku xml pojawiaja sie przestrzenie nazw, wtedy kazde z rozwiazan zawodzi:(
oto co probowalem: 1 rozwiazanie)
plik xml
wynik: Warning: Variable passed to each() is not an array or object in /home/pawel/public_html/next4.php on line 7 2 rozwiazanie)
niestety w tym wypadku funkcja file_get_contents() nie akceptuje znaku ":" wymaganego przez przestrzenie nazw w xml:( czy ktos potrafi napisac kod ktory wybierze dowolnie wybrany atrybut z pliku xml?? pozdr:) |
|
|
![]()
Post
#11
|
|
Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 117 Pomógł: 0 Dołączył: 24.05.2004 Skąd: krakow Ostrzeżenie: (10%) ![]() ![]() |
nie rozumiem. wedlu mnie kod:
nie jest pomocny w moim przypadku. Oto wynik dzialania: Kod local name: include, prefix: xi local name: fallback, prefix: xi tak wiec mozliwe jest uzyskanie jedynie nazwy atrybutu danego elementu(znacznika) a nie wartosc znacznika XML. Tak wiec jesli ktos wie jak rozwiazac moj problem to prosze raz jeszcze o pomoc. To na pewno musi dac sie zrobic jakos..... pozdr |
|
|
![]()
Post
#13
|
|
Administrator PHPedia.pl Grupa: Developerzy Postów: 1 102 Pomógł: 2 Dołączył: 14.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
Spójrz wreszcie do manuala i zobacz jakie atrybuty ma ten obiekt.
hint. $element->nodeValue; |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 117 Pomógł: 0 Dołączył: 24.05.2004 Skąd: krakow Ostrzeżenie: (10%) ![]() ![]() |
spojrzałem do manuala i próbowałem zastosować przykład - bez pozytywnych rezultatów, tymbardziej, ze musze miec caly plik zaladowany do zmiennej, a nie string.
Ale czesciowo rozwiazalem swoj problem dzieki Xpath. Jednakze do tego celu musialem uzyc odpowiedniego zapytania aby uzyskac dane czyli np:
Kluczem wlasnie do wybrania danych jest skonstruowanie odpowiedniego zapytania(mozna to porownac do bazy danych, a Xpath jest jak jezyk SQL) wiecej na stronie: http://www.w3.org/TR/xpath Ale jesli ktos z Was znajdzie inny sposob wybrania danych to chetnie go poznam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) pozdr |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 487 Pomógł: 7 Dołączył: 7.01.2004 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Nie jestem pewien, bo problem jest dość długi, ale możesz spróbować
To się dopasuje do
Ten post edytował splatch 13.09.2005, 12:55:04 |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 117 Pomógł: 0 Dołączył: 24.05.2004 Skąd: krakow Ostrzeżenie: (10%) ![]() ![]() |
Wraz z rozwiązaniem, które znalazłem nasunął się kolejny problem(to chyba dobrze:)
Więc w tym kodzie:
wybieram wszystkie elementy, które zawierają w nazwie string:"year". O ile w wyszukiwanym pliku znajdują się elementy o takiej nazwie wówczas wszystkie ich wartości zostają wybrane. Ale jeśli w pliku analizowanym nie ma takiego elementu wówczas zostają wypisane błędy na ekran. Jak obejść ten problem? Generalnie użytkownik w moim systemie ma możliwość wybrania jednego z pól i te pola zostają wypisane z całego pliku, a właśnie jeśli wybierze pole którego nie ma w danym pliku to wyrzucane są błędy (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 10:40 |