Article View: pl.comp.lang.perl
Article #52000XML::LibXML i inkludowanie plików
From: 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.
Technical Details
Message-ID:
<20101025161044.6b8b4567@polsl.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!polsl.pl!not-for-mailShow Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!polsl.pl!not-for-mail From: Adam Osuchowski <someone@somewhere.com> Newsgroups: pl.comp.lang.perl Subject: XML::LibXML i inkludowanie plików Date: Mon, 25 Oct 2010 16:10:44 +0000 (UTC) Organization: Politechnika Slaska, Gliwice Lines: 31 Message-ID: <20101025161044.6b8b4567@polsl.pl> NNTP-Posting-Host: hydra.ck.polsl.pl Mime-Version: 1.0 X-Trace: polsl.pl 1288023044 22627 157.158.1.11 (25 Oct 2010 16:10:44 GMT) X-Complaints-To: news@polsl.pl NNTP-Posting-Date: Mon, 25 Oct 2010 16:10:44 +0000 (UTC) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit