2010-02-25 14 views
6

Sto cercando di includere un riferimento a un DTD nel mio documento XML usando minidom.Imposta un DTD usando minidom in python

sto creando il documento come:

<?xml version="1.0" ?> 
<foo/> 

ho bisogno di ottenere qualcosa di simile a::

<?xml version="1.0" ?> 
<!DOCTYPE something SYSTEM "http://www.path.to.my.dtd.com/my.dtd"> 
<foo/> 

risposta

9

La documentazione non è aggiornata. Usa la fonte, Luke. Lo faccio qualcosa di simile.

from xml.dom.minidom import DOMImplementation 

imp = DOMImplementation() 
doctype = imp.createDocumentType(
    qualifiedName='foo', 
    publicId='', 
    systemId='http://www.path.to.my.dtd.com/my.dtd', 
) 
doc = imp.createDocument(None, 'foo', doctype) 
doc.toxml() 

Stampa ciò che segue.

<?xml version="1.0" ?><!DOCTYPE foo SYSTEM \'http://www.path.to.my.dtd.com/my.dtd\'><foo/> 

Nota come l'elemento radice viene creato automaticamente da createDocument(). Inoltre, il tuo 'qualcosa' è stato cambiato in 'pippo': il DTD deve contenere il nome dell'elemento radice stesso.

+0

Bello. Felice di aver trovato una soluzione! – smencer

1

Secondo the Python docs, non c'è

doc = Document() 
foo = doc.createElement('foo') 
doc.appendChild(foo) 
doc.toxml() 

Questo mi dà implementazione dell'interfaccia DocumentType nel minidom.

Problemi correlati