[xml] DTDs and null SystemID/ExternalID ?
- From: Stefan Jeglinski <jeglin 4pi com>
- To: xml gnome org
- Subject: [xml] DTDs and null SystemID/ExternalID ?
- Date: Fri, 6 Jul 2007 22:40:39 -0400
Setup for the question: it appears that there are 3 basic DOCTYPES
for an xml document:
1:
<!DOCTYPE root_name SYSTEM "local_path_to_dtd">
<
...
(xml content)
...
2:
<!DOCTYPE root_name PUBLIC "url_to_dtd">
<
...
(xml content)
...
3:
<!DOCTYPE root_name [
...
(element definitions etc)
...
]>
<
...
(xml content)
...
I'm trying to do the 3rd one, where the dtd is self-contained within
the xml file. I am doing it in memory, using
xmlParserInputBufferCreate etc. I create a doc using xmlNewDoc, then
the dtd from the buffer using xmlIOParseDTD, and then blow it out to
disk with xmlSaveFormatFile. Works like a champ, except that...
I've boxed myself into a corner. Snooping the libxml2 source
(xmlsave.c, xmlDtdDumpOutput), I see that I can create the 3rd type
only if SystemID and ExternalID are NULL. But this is directly at
odds with xmlIOParseDTD, which ultimately allocates both and fills
them in with "none".
You can't naively can't set them to NULL after the fact, because you
will die in xmlFreeDoc.
Is there a way to create the dtd in memory so that both SystemID and
ExternalID are NULL, giving me DOCTYPE #3? Or am I out in left field
here? (I'm working my way through learning this stuff bit by bit, and
frankly don't know any better...)
Stefan Jeglinski
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]