Portál AbcLinuxu, 15. července 2025 05:13


Dotaz: libxml: entity

Fuky avatar 15.11.2006 15:49 Fuky | skóre: 52 | blog: 4u
libxml: entity
Přečteno: 190×
Odpovědět | Admin
Pro zpracování XML souboru používám funkci xmlParseDocument(ctxt_ptr); a callback funkce, které při tom volá (startElement, endElement, ...). Ale stále nemohu přijít na to jak vypnout nahrazování entit (lt, gt, quot, ...). Neví někdo jak na to?
-- RÁMO: psí tábor , ETriatlon: Výuka plavání

Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

15.11.2006 16:13 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: libxml: entity
Odpovědět | | Sbalit | Link | Blokovat | Admin
Vypnout? Nahrazování entit je práce pro parser, pokud je chcete vypnout, asi chápete špatně jejich funkci – entita je "zástupce", který se během parsování nahradí svou hodnotou. Pro nikoho jiného než pro parser tedy entita nemá význam.
Fuky avatar 15.11.2006 18:18 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: libxml: entity

Špatně jsem popsal svůj problém. Mám např. <tag>A &lt; B</tag>. Při parsování mi callback funkce characters vrátí " B" místo "A < B". Vypadá to jako by si parser nejprve nahradil entity a teprve poté projel XML soubor a na základě toho produkuje tyto useknuté části.

15.11.2006 19:11 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: libxml: entity
To je divné, to by ten parser vůbec nemohl fungovat… Počítáte s tím, že characters může data dostávat po částech (tj. třeba "A < B" může dostat třeba jako "A <" a pak " B")?
Fuky avatar 15.11.2006 20:02 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: libxml: entity

Opravdu je to tak, vrací postupně "A ", "<", " B". Díky moc za nakopnutí.

Měl jsem totiž v programu ještě jednu chybu, zapomněl jsem buffer naplnit nulami, před použitím funkce strncpy, takže to vytvořilo slátaninu, která mě svedla z cesty a já vymyslel takovouhle blbost ;-)

16.11.2006 00:23 Petr
Rozbalit Rozbalit vše Re: libxml: entity
Tohle je normální chování SAX parserů (řeší se SAX filterem, který bufferuje po sobě následující textové události). Používat SAX je ale trochu masochismus. V libxml2 je dnes upřednostňováno pull-parser rozhrani xmlTextReader.
15.11.2006 19:53 razor | skóre: 33
Rozbalit Rozbalit vše Re: libxml: entity
A není to tak, že ten DOM vypadá nějak takto (čistě schematicky):
[ TagNode 
    [CharacterNode] 
    [EntityReferenceNode
      [CharacterNode]
    ] 
    [CharacterNode] 
]
?

Takže ta funkce characters je volána 3x a to nejdříve pro "A ", "<" a " B".

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.