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)
Poszukaj ignoreWhitespace(s) - jest taka opcja - przynajmniej w PHP udostepniona w DOMie.
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.