2014-11-04 17 views
5

Theo các câu trả lời được cung cấp cho câu hỏi cuối cùng của tôi How to inject elements into character content with Closure XML? Tôi đã thực hiện một lớp con của cxml: trình xử lý sax-proxy (một trường hợp cụ thể của trình xử lý phát sóng). Thật không may, trông giống như một lỗi trong thư viện nhưng nó cố gắng tạo ra XML với các định nghĩa kiểu tài liệu nội bộ nhưng tài liệu là một XML không hợp lệ.đầu ra không hợp lệ của bộ xử lý phát sóng trong gói XML Lisp đóng gói chung

Đó là, chạy phân tích cú pháp bằng lệnh:

(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))) 

nơi tệp harem.xml bắt đầu bằng (xem DOCTYPE):

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

lệnh sản xuất trong teste.xml tệp xuất:

<?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"> 
... 

Đó là, trình xử lý ghi DTD trong đầu ra nhưng theo cách sai, wi thout các tờ khai bên trong []. Nó là một lỗi trong thư viện hay trong mã của tôi?

Trả lời

2

tôi truy tìm thông qua các bước cxml mất ví dụ của bạn và prepared a patch here (file đầu tiên, so với cxml cam kết cuối cùng, 991fac513dbd9b86628f99741a66d791552b1f02, áp dụng với git apply 0001-....patch trong thư mục gốc của kiểm tra ra kho cxml ). Đối với tôi, có vẻ như đường dẫn mã ở đây không phải là kích hoạt sự kiện SAX cho tập hợp con DTD, vì vậy sau khi thêm rằng đầu ra có cần thêm "["/"]".

Bạn có thể xác minh điều này phù hợp với mình không? Tôi cũng không chắc chắn nếu SAX:START-INTERNAL-SUBSET thực sự chính xác, nhưng dường như thực hiện công việc tại đây.

Các vấn đề liên quan