🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.perl
1 messages
1 total messages Started by Adam Osuchowski Mon, 25 Oct 2010 16:10
XML::LibXML i inkludowanie plików
#52000
Author: Adam Osuchowski
Date: Mon, 25 Oct 2010 16:10
31 lines
2632 bytes
Witam,

mam aplikację czytającą XMLa w oparciu o parser XML::LibXML. Potrzebuję
zaimplementować inkludowanie plików z pliku głównego. Początkowo robiłem to
tak, że wyszukiwałem elementy <include file="..." /> i za pomocą metody
XML::LibXML::Node::replaceNode chciałem je zamieniać na tekst zawierający
wczytanego XMLa. Niestety parser wciskał w to miejsce CDATA, przy okazji
zamieniając (eskejpując) znaki < i > na odpowiednie encje co oczywiście nie
było tym czego oczekiwałem. Stworzenie nowego obiektu XML::LibXML::Document
z wczytanego pliku i podmienienie go tą samą metodą za element <include>
(klasa XML::LibXML::Document jest pochodną klasy XML::LibXML::Node więc
teoretycznie powinno się to udać) powodowało z kolei wysypywanie się aplikacji
z segfaultem (sypała się chyba sama biblioteka libxml2). Próbowałem również
użyć do tego wspieranego mechanizmu XInclude, ale się okazywało, że mogę
w ten sposób zainkludować tylko pojedynczy element, a ja potrzebowałbym
wciągać większe kawałki XMLa. Oczywiście googlanie i przejrzenie CPANa
też nic nie dało (albo dawałem złe zapytania albo nikt nie miał takiego
problemu).

Nie mam teraz siły ani czasu przegrzebywać się przez źródła libxml2
w poszukiwaniu dlaczego się sypie, stąd pytanie, czy ktoś robił coś podobnego
i wie jak? W ogólności problem dotyczy podmiany jednego elementu na kawałek
XMLa złożony z więcej niż jednego elementu na tym samym poziomie zagłębienia
i goły tekst przeplatany między elementami. Inkludowanie pliku jest tylko
jednym z zastosowań takiej funkcjonalności. Mogę oczywiście w ostateczności
(pewnie tylko dla prostych przypadków) przelecieć to jakimś regexpem
wyłuskując odpowiednie elementy i je podmieniając, ale skoro już odpalam całą
obiektową maszynerię do XMLa to dobrze byłoby mieć to rozwiązane elegancko
w ten sposób.

Pozdrawiam.
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads