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
Author: Adam Osuchowski
Date: Mon, 25 Oct 2010 16:10
Date: Mon, 25 Oct 2010 16:10
31 lines
2632 bytes
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