move call to xmlKeepBlanksDefault(0) to before the creation of an XML parser context
the value is used by the parser context; the old code called it only after the *first* parser context was created. therefore the first XMLTree::read() call has its behavior determined by libxml2's default for this value, rather than by our explicit choice (do not treat whitespace as a note). All subequent read() calls will use our value. This variable inside libxml2 is actually per-thread, which just increases the stakes for calling xmlKeepBlanksDefault() at the right time
This commit is contained in:
parent
7570b9a594
commit
df3a4ed9c6
@ -85,13 +85,17 @@ XMLTree::read_internal(bool validate)
|
|||||||
_doc = 0;
|
_doc = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Calling this prevents libxml2 from treating whitespace as active
|
||||||
|
nodes. It needs to be called before we create a parser context.
|
||||||
|
*/
|
||||||
|
xmlKeepBlanksDefault(0);
|
||||||
|
|
||||||
/* create a parser context */
|
/* create a parser context */
|
||||||
xmlParserCtxtPtr ctxt = xmlNewParserCtxt();
|
xmlParserCtxtPtr ctxt = xmlNewParserCtxt();
|
||||||
if (ctxt == NULL) {
|
if (ctxt == NULL) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
xmlKeepBlanksDefault(0);
|
|
||||||
/* parse the file, activating the DTD validation option */
|
/* parse the file, activating the DTD validation option */
|
||||||
if (validate) {
|
if (validate) {
|
||||||
_doc = xmlCtxtReadFile(ctxt, _filename.c_str(), NULL, XML_PARSE_DTDVALID);
|
_doc = xmlCtxtReadFile(ctxt, _filename.c_str(), NULL, XML_PARSE_DTDVALID);
|
||||||
|
Loading…
Reference in New Issue
Block a user