Parsowanie xml - active support

Cześć!
Potrzebuję pomocy z parsowaniem XML, który przychodzi w w zapytaniu HTTP PUT.

<?xml version="1.0" encoding="UTF-8"?> tresc xmla .

Nie używałam żadnych dodatkowych bibliotek a tylko active support.

Po pierwsze: jeśli jakiś element posiada wartość i atrybuty, to te atrybuty nie są dostępne (przynajmniej ja nie potrafię się do nich dobrać:P). Jeśli jest tylko wartość lub tylko atrybuty jest OK.
Po drugie: jak dobrać się do atrybutu xml:lang? Takie próby jak params[:root][:xml:lang] nie za bardzo działają…

Justyna.

Na drugie pytanie już sama wiem jak odpowiedzieć: params[:root][:“xml:lang”] :slight_smile:

Czekaj, jak dokładnie parsujesz XMLa?

pewnie Hash.from_xml

daj sobie w konsoli

require ‘pp’

pp Hash.from_xml(XML_TWOJ) i obejrzyj jak sie gdzie dobrac i tyle

Cześć Chłopaki! Dzięki za odzew!
Nie używałam Hash.from_xml…

Może zapytam inaczej:
Załóżmy, że serwer ma oczekiwać na wiadomości HTTP PUT, Content_type = text/xml a Body takie jak podałam w pierwszej wiadomości.
Jak wtedy dobrać się do każdego z atrybutów i wartości elementów?

Jeśli np. w Body takiej wiadomości byłby następujący xml:

<?xml version="1.0" encoding="UTF-8"?> tresc xmla to z "wyłuskaniem" poszczególnych parametrów nie ma problemu: length = params[:root][:length] lang = params[:root][:"xml:lang"] value = params[:root][:value] .

Problem dla mnie pojawił się, kiedy element ma zarówno atrybuty jak i wartość (nie zagnieżdżoną kolejnymi elementami).
Ale może ja po prostu nie robię tego tak jak trzeba??

Nokogiri

http://railscasts.com/episodes?utf8=✓&search=nokogiri

To jeszcze się upewnię czy dobrze rozumiem:)
Czyli powinnam wziąć: request.raw_post i sparsować go sobie przy użyciu np. Nokogiri, tak?

Zastanawia mnie to, że jak np. chcę sobie wypisać parametry z treści PUTa czy POSTa, używając request.request_parameters, to wszystko jest OK w takim przypadku:

<?xml version="1.0" encoding="UTF-8"?> tresc xmla

Ale już w takim poniżej argumenty length oraz xml:lang tak jakby nie istniały…

<?xml version="1.0" encoding="UTF-8"?> tresc xmla

Chciałabym zrozumieć o co chodzi :slight_smile:

Justyna

jeszcze dodam, że swoją wiedzę do analizy body wiadomości PUT/POST czerpałam z tego http://guides.rubyonrails.org/action_controller_overview.html .

obejrzyj sobie screencast o nokogiri, poczytaj ich doc. http://nokogiri.org/tutorials/parsing_an_html_xml_document.html