gpt4 book ai didi

xml - Common Lisp Closure XML 包中广播处理程序的无效输出

转载 作者:数据小太阳 更新时间:2023-10-29 01:58:28 26 4
gpt4 key购买 nike

按照我为上一个问题提供的答案 How to inject elements into character content with Closure XML?我实现了 cxml:sax-proxy 处理程序的一个子类(广播处理程序的一个特例)。不幸的是,看起来像是库中的错误,但它尝试生成具有内部文档类型定义的 XML,但该文档是无效的 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">
...

也就是说,处理程序在输出中写入 DTD,但方式错误,没有 [] 中的声明。是库中的错误还是我的代码中的错误?

最佳答案

我跟踪了 CXML 为您的示例所采取的步骤,并且 prepared a patch here(第一个文件,针对最后一次 CXML 提交,991fac513dbd9b86628f99741a66d791552b1f02,申请git apply 0001-....patch 在 checkout 的 CXML 的根目录中存储库)。对我来说,这里的代码路径似乎没有为 DTD 子集触发 SAX 事件,所以在添加之后输出添加了必要的 ["/"]"

你能证实这对你有用吗?我也不确定SAX:START-INTERNAL-SUBSET 实际上是正确的,但它似乎做了在这里工作。

关于xml - Common Lisp Closure XML 包中广播处理程序的无效输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26738465/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com