🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.perl
Article #52000

XML::LibXML i inkludowanie plików

#52000
From: 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.
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-mail

Show 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