2014-11-04 8 views
5

में ब्रॉडकास्ट हैंडलर का गैर वैध आउटपुट मेरे अंतिम प्रश्न How to inject elements into character content with Closure XML? के लिए दिए गए उत्तरों के बाद मैंने सीएक्सएमएल का एक उप-वर्ग लागू किया: एसएक्स-प्रॉक्सी हैंडलर (प्रसारण हैंडलर का एक विशेष मामला)। दुर्भाग्यवश, लाइब्रेरी में एक बग की तरह दिखता है लेकिन यह एक्सएमएल को आंतरिक दस्तावेज़ प्रकार परिभाषाओं के साथ उत्पन्न करने का प्रयास करता है लेकिन दस्तावेज़ एक वैध मान्य एक्सएमएल है।सामान्य लिस्प क्लोजर एक्सएमएल पैकेज

यही है, आदेश के साथ पार्सर चल:

(with-open-file (out #P"teste.xml" :if-exists :supersede :direction :output) 
     (let ((h (make-instance 'preproc :chained-handler (cxml:make-character-stream-sink out)))) 
    (cxml:parse #P"harem.xml" h :validate t))) 

जहां फ़ाइल harem.xml साथ शुरू होता है (डॉक प्रकार देखें):

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE colHAREM SYSTEM "harem.dtd"> 
<colHAREM versao="Segundo_dourada_com_relacoes_14Abril2010"> 
    <DOC DOCID="H2-dftre765"> 
    <p>... 

आदेश teste.xml में पैदा करता है आउटपुट फ़ाइल:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE colHAREM SYSTEM "harem.dtd"<!ELEMENT EM #PCDATA> 
<!ATTLIST EM ID CDATA #REQUIRED> 
<!ATTLIST EM CATEG CDATA #IMPLIED> 
<!ATTLIST EM TIPO CDATA #IMPLIED> 
<!ATTLIST EM COMENT CDATA #IMPLIED> 
<!ATTLIST EM SUBTIPO CDATA #IMPLIED> 
<!ELEMENT ALT (#PCDATA|EM)*> 
<!ELEMENT OMITIDO (#PCDATA|EM|ALT|p)*> 
<!ELEMENT colHAREM (DOC)*> 
<!ATTLIST colHAREM versao CDATA #REQUIRED> 
<!ELEMENT p (#PCDATA|EM|OMITIDO|ALT)*> 
<!ATTLIST p xml:space (default|preserve) "default"> 
<!ELEMENT DOC (#PCDATA|p|OMITIDO)*> 
<!ATTLIST DOC DOCID CDATA #REQUIRED> 
> 
<colHAREM versao="Segundo_dourada_com_relacoes_14Abril2010"> 
... 

यही है, हैंडलर आउटपुट के अंदर डीटीडी लिखता है लेकिन गलत तरीके से, वाई [ और ] के अंदर घोषणाओं के बारे में बताएं। क्या यह पुस्तकालय में या मेरे कोड में एक बग है?

उत्तर

2

मैं चरणों CXML अपने उदाहरण और prepared a patch here के लिए ले जाता है के माध्यम से पता लगाया (पहली फ़ाइल, के खिलाफ पिछले CXML प्रतिबद्ध, 991fac513dbd9b86628f99741a66d791552b1f02, चेक आउट CXML भंडार की जड़ में git apply 0001-....patch साथ लागू)। मेरे लिए यह कोड पथ जैसा दिखता है, बस डीटीडी सबसेट के लिए SAX ईवेंट ट्रिगर नहीं करता है, इसलिए आउटपुट के बाद "["/"]" जोड़ा गया है।

क्या आप कृपया यह सत्यापित कर सकते हैं कि यह आपके लिए काम करता है? मुझे यह भी यकीन नहीं है कि SAX:START-INTERNAL-SUBSET वास्तव में सही है, लेकिन ऐसा लगता है कि यहां काम है।

संबंधित मुद्दे