Re: [xml] Inserting a DTD when creating a XML file

Yvan Paitel wrote:

If I save the document (using xmlSaveFile or xmlSaveFileFormat), the DTD is
neither included nor referenced in the xml file. Any idea?

Thanks for your help,

I do the following (C++):

  dtd = xmlParseDTD(NULL, dtd_path);
  if (dtd->name != NULL)
  dtd->name = xmlStrdup(root_name);
  doc->intSubset = dtd;

  // Get rid of system id -- internal references only
  if (dtd->SystemID != NULL)
  dtd->SystemID = NULL;

  dtd->doc = doc;
  dtd->parent = doc;
  doc->children  = (xmlNodePtr)dtd;

  // Define and insert the root of the output document
  root = dtd->next = xmlNewDocNode(doc, NULL, root_name, NULL);

When the file is saved, it has the DTD embedded at the beginning of the file.


-----Original Message-----
From: Daniel Veillard [mailto:veillard redhat com]
Sent: Thursday, January 24, 2002 7:36 AM
To: darrell
Cc: ypaitel sofamordanek com; xml gnome org
Subject: Re: [xml] Inserting a DTD when creating a XML file

On Tue, Jan 22, 2002 at 09:17:44PM -0700, darrell wrote:
i am unsure if anyone is alowed to reply,

  Of course !

but this is an exerpt from the
faq, perhaps it is not what you are looking for?

It is also possible to simply add a Dtd to an existing document:

xmlDocPtr doc; /* your existing document */
        xmlDtdPtr dtd = xmlParseDTD(NULL, filename_of_dtd); /* parse the
DTD */
        dtd->name = xmlStrDup((xmlChar*)"root_name"); /* use the given
root */

        doc->intSubset = dtd;

  It can be a good idea to link the DTD as the first node in the doc
children list:
     if (doc->children == NULL)
         xmlAddChild((xmlNodePtr) doc, (xmlNodePtr) dtd);
         xmlAddPrevSibling(doc->children, (xmlNodePtr) dtd);


Daniel Veillard      | Red Hat Network
veillard redhat com  | libxml Gnome XML XSLT toolkit | Rpmfind RPM search engine
xml mailing list, project page
xml gnome org

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]