Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Parsowanie pliku xml/rdf z namespaces do obiektu/tablicy [SimpleXML]
WiruSSS
post 10.08.2013, 09:38:23
Post #1





Grupa: Zarejestrowani
Postów: 83
Pomógł: 7
Dołączył: 3.02.2007

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


Witam

Posiadam pliki o strukturze rdf, które potrzebuję sparsować do tablicy w taki sposób, żeby mozna było ten proces później odwrócić. Na ten moment parser działa już tak, ze rozpoznaje poszczególne elementy które potrzebuje przetworzyć, wypluwa coś takiego:

  1. x:xmpmeta xmlns:x="value" x:xmptk="value"
  2. rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  3. rdf:Description rdf:about="" xmlns:aaa="value" xmlns:bbb="value" xmlns:ccc="value" xmlns:ddd="value" aaa:param="value" aaa:param2="value" bbb:param="value"
  4. ccc:Param
  5. rdf:Seq
  6. rdf:li
  7. value
  8. rdf:li
  9. rdf:li
  10. value2
  11. rdf:li
  12. rdf:li
  13. value3
  14. rdf:li
  15. rdf:Seq
  16. ccc:Param
  17. ddd:Param
  18. value
  19. ddd:Param
  20. rdf:Description
  21. rdf:RDF
  22. x:xmpmeta


oczywiście nic nie stoi na przeszkodzie zeby wypluwał '/' przy znacznikach zamykających jesli by to mialo w czyms pomóc. Potrzebuję to jakoś wrzucic do tablicy żebym mógl porównac ze soba kilka takich tablic, konkretnie porównywane bedą wszystkie 'value' poszczególnych parametrów

pozdrawiam

Ten post edytował WiruSSS 11.08.2013, 09:28:42
Go to the top of the page
+Quote Post
Crozin
post 10.08.2013, 09:56:37
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


1. Przecież RDF to zwykły XML, dlaczego nie wykorzystasz pierwszej lepszej biblioteki do jego obsługi?
2. Zamiast mapować dane do tablicy wykorzystaj obiekty. Będą znacznie wygodniejsze przy pracy, ze względu na możliwość indywidualnego określenia równości dwóch elementów jak i składowania metadanych.
Go to the top of the page
+Quote Post
WiruSSS
post 10.08.2013, 10:02:27
Post #3





Grupa: Zarejestrowani
Postów: 83
Pomógł: 7
Dołączył: 3.02.2007

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


próbowałem uzyć simplexml ale sie sypie, być może te pliki nie spełniaja wszystkich wytycznych dla plików rdf ...bardzo prosze o info jak to przerzucic czy to do tablicy czy do obiektu
Go to the top of the page
+Quote Post
Crozin
post 10.08.2013, 10:18:23
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


1. Pokaż oryginalny plik i sprawdź czy jest on poprawnym XML-em: http://www.xmlvalidation.com/
2. Pokaż swój kod.
3. SimpleXML jest raczej słabą biblioteką, ale i ona poradzi sobie bez większego problemu z RDF-em: http://www.sitepoint.com/simplexml-and-namespaces/
Go to the top of the page
+Quote Post
spacja
post 10.08.2013, 10:27:06
Post #5





Grupa: Zarejestrowani
Postów: 15
Pomógł: 1
Dołączył: 29.10.2012

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


Kod
http://stackoverflow.com/questions/2486722/parse-rdf-xml-file-to-get-all-rdfabout-values



Tutaj z wykorzystaniem rdf paraser
Kod
http://phpxmlclasses.sourceforge.net/php_rdf_tutorial.pdf



i jeszcze inna biblioteka :
Kod
https://github.com/semsol/arc2

smile.gif

Ten post edytował spacja 10.08.2013, 10:29:57
Go to the top of the page
+Quote Post
WiruSSS
post 10.08.2013, 10:29:31
Post #6





Grupa: Zarejestrowani
Postów: 83
Pomógł: 7
Dołączył: 3.02.2007

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


...jeszce raz sprawdziłem, simplexml zwraca pusty obiekt, sprawdziłem jeden z plików tym walidatorem wynika z niego ze ten plik jest poprawny. Jaką inną biblioteke mozesz polecić?
Go to the top of the page
+Quote Post
Crozin
post 10.08.2013, 10:31:29
Post #7





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Skoro SimpleXML zwraca Ci pusty obiekt dla niepustych danych wejściowych to... zapewne jest jakiś błąd, dlaczego go nie sprawdzisz?

1. Ponownie: pokaż kod.
2. http://www.php.net/manual/en/refs.xml.php
Go to the top of the page
+Quote Post
WiruSSS
post 10.08.2013, 10:47:50
Post #8





Grupa: Zarejestrowani
Postów: 83
Pomógł: 7
Dołączył: 3.02.2007

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


ponizej link do przykladowego pliku, tak jak mówiłem nie jet to typowy plik rdf chocby ze wzgledu na rozszerzenie, ale to chyba nie powino mieć znaczenia.

http://clients.goodlux.com/tiffany/cr2/IMG_0390.xmp

[EDIT]

to niby jakoś tam parsuje, działa tylko w jedną strone, sparsowany plik nie wraca do swojej poprzedniej postaci po ponownym parsowaniu za pomocą tego narzędzia

[EDIT]

Ok prepraszam jesli jest to jakiś banalny problem ale z obiektowym php jak do tej pory miałem malo do czynienia i cięzko mi jest jeszce zrozumiec pewne rzeczy. Doszedłem do szegoś takiego:

  1. $xml = 'http://clients.goodlux.com/tiffany/cr2/IMG_0390.xmp';
  2.  
  3. $xml = simplexml_load_file($xml);
  4.  
  5. $ns = $xml->getNameSpaces(true);
  6. print_r($ns);
  7.  
  8. $x = $xml->children($ns['x']);
  9.  
  10. print_r($x);


rezultat jest taki

Kod
Array
(
    [x] => adobe:ns:meta/
    [rdf] => http://www.w3.org/1999/02/22-rdf-syntax-ns#
    [exif] => http://ns.adobe.com/exif/1.0/
    [aux] => http://ns.adobe.com/exif/1.0/aux/
    [tiff] => http://ns.adobe.com/tiff/1.0/
    [xap] => http://ns.adobe.com/xap/1.0/
    [dc] => http://purl.org/dc/elements/1.1/
    [crs] => http://ns.adobe.com/camera-raw-settings/1.0/
    [photoshop] => http://ns.adobe.com/photoshop/1.0/
)
SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [xmptk] => Public XMP Toolkit Core 3.5
        )

)


[EDIT]

Więc wychodzi na to że mam dostęp do każdej gałezi z osobna

Potrzebowałbym zrobić tak, zeby caly ten plik znalazł się w jednym obiekcie/tablicy ...trochę zaczynam rozumieć o co chodzi z namespaces. Znalazłem kilka przykałdów jak się dostać do takich gałęzi jednak żaden z nich nie ma odzwierciedlenia w moim przypadku.

Z tego co widze to zwykłe pliki xml wyglądają dokładnie tak jakbym sobie tego zyczył natomiast obiekty z namespaces są 'dziurawe' ...czy istnieje jakas funkcja która wyswietli mi cały plik rdf w takiej formie jak zwykly plik xml ale z uwzglednieniem tych namespaces?

[EDIT]

Ok poradziłem w sobie w najbardziej prozaiczny z mozliwych sposobów, szkoda, ze wcześniej na to nie wpadłem tongue.gif
Dla potomnych jesli komuś by się miało przydać

  1. $xml = 'http://clients.goodlux.com/tiffany/cr2/IMG_0390.xmp';
  2. $xml = file_get_contents($xml);
  3. $xml = preg_replace('#([</][a-zA-Z]+):([a-zA-Z0-9]+)#', "$1___$2", $xml);
  4. $xml = preg_replace('#([a-zA-Z]+):([a-zA-Z0-9]+=)#', "$1___$2", $xml);
  5. $xml = simplexml_load_string($xml);
  6. print_r($xml);


...dokładnie tego mi było trzeba tongue.gif

Ten post edytował WiruSSS 10.08.2013, 18:27:05
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 Wersja Lo-Fi Aktualny czas: 16.06.2025 - 19:34