Białe znaki w XML-u

tech • 114 słów • 1 minuta czytania

Nie wiem, jak jest zdefiniowana ta sprawa w standardzie, ale taki libxml2 białe znaki między elementami XML-a uznaje jako element. Skutkuje to tym, że mając taki XML:

<root>
	<node>node value</node>
</root>

pierwszym dzieckiem <root/>-a jest element zawierający tabulator i znak końca wiersza, a następnym dopiero <node/>.

Większość parserów, także tych “wbudowanych” w skryptowe języki - PHP, Perl, standardowo ignoruje takie elementy.

Miałem nadzieję, że libxml ma jakaś opcję pozwalającą zignorować puste elementy, ale niestety nic nie znalazłem. Będę musiał się pomęczyć z xmlIsBlankNode().

Tak przy okazji, libxml ma bardzo wielkie możliwości, ale póki co wykorzystuję tylko podstawowe elementy w tworzonym serwerze proxy XMPP<>Tlen. Na korzyść libxml-a przemawia także bardzo łatwa współpraca z libxslt ;)

Komentarze (2)

NuLL
20070905-092952-null

Poszukaj ignoreWhitespace(s) - jest taka opcja - przynajmniej w PHP udostepniona w DOMie.

MalCom
20070905-101148-malcom

Znalazłem w enum xmlParserOption pozycję: XML_PARSE_NOBLANKS = 256 : remove blank nodes.

Teraz tylko podmienić funkcję do “ładowania” XML-a z pliku i stringu na takie, które przyjmują flagi. Tylko przez to stracę domyślnie ustawione flagi, chyba, że znajdę coś co pozwoli ustawić dowolną flagę.

Jeszcze jeden mały mankament na jaki trafiłem - libxml do każdego “zrzutu” XML-a, czy do pliku, czy stringu dołącza prolog XML. Twórcy tłumaczą się tym, że wymaga tego standard XML 1.1. Nie znalazłem nic ciekawego w libie, aby to “wyłączyć”, chyba ręcznie będę musiał to usuwać, przy dumpach.

Dodaj komentarz

/dozwolony markdown/

/nie zostanie opublikowany/