Hi,
Quoting Sunil Mishra (smishra@sfmishras.com):
- create-document does not set the dtd of a document based on the
supplied document type definition. This for example inhibits get-element-by-id from working.
I am not convinced that DOMImplementation.createDocumentType() is meant to go and start parsing DTDs.
Instead, I have implemented a new function CXML:PARSE-EMPTY-DOCUMENT, which will look for DTDs like the other parser functions do, and that can be used together with a DOM builder to create a new DOM document.
I hope that works for you; please test!
Example below.
Thanks, David -------- CL-USER(52): (cxml:parse-empty-document #"http://www.w3.org/1999/xhtml" #"html" (cxml-dom:make-dom-builder) :public-id #"-//W3C//DTD XHTML 1.0 Transitional//EN" :system-id #u"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd") #<UTF8-DOM::DOCUMENT {BD01A19}> CL-USER(53): (describe *) #<UTF8-DOM::DOCUMENT {BD01A19}> is an instance of class #<STANDARD-CLASS UTF8-DOM::DOCUMENT>. The following slots have :INSTANCE allocation: PARENT NIL CHILDREN #(#<UTF8-DOM::ELEMENT html {C1EE099}>) OWNER NIL READ-ONLY-P NIL MAP NIL DOC-TYPE #<UTF8-DOM::DOCUMENT-TYPE {BD02001}> DTD #S(CXML::DTD :ELEMENTS #<HASH-TABLE :TEST EQUALP :COUNT 89 {BD074B9}> :GENTITIES #<HASH-TABLE :TEST EQUALP :COUNT 253 {BD076A9}> :PENTITIES #<HASH-TABLE :TEST EQUALP :COUNT 68 {BD07899}> :NOTATIONS #<HASH-TABLE :TEST EQUALP :COUNT 0 {BD07A89}>) ENTITY-RESOLVER #<CLOSURE (LAMBDA (CXML::N CXML::H)) {C1ED945}> CL-USER(54): (describe (dom:doctype **)) #<UTF8-DOM::DOCUMENT-TYPE {BD02001}> is an instance of class #<STANDARD-CLASS UTF8-DOM::DOCUMENT-TYPE>. The following slots have :INSTANCE allocation: PARENT NIL CHILDREN #() OWNER #<UTF8-DOM::DOCUMENT {BD01A19}> READ-ONLY-P NIL MAP NIL NAME "html" PUBLIC-ID "-//W3C//DTD XHTML 1.0 Transitional//EN" SYSTEM-ID "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" ENTITIES #<UTF8-DOM::NAMED-NODE-MAP {BD01FD1}> NOTATIONS #<UTF8-DOM::NAMED-NODE-MAP {BD01FA9}> %INTERNAL-SUBSET "unbound"