当使用dtd时,clojure xml解析速度很慢

时间:2014-02-04 22:14:31

标签: xml performance validation clojure

我正在使用clojure.data.xml/parse来解析xml。不幸的是,从服务器发回的xml格式不正确,因为它包含转义的unicode和特殊字符,没有dtd。我通过手动插入

解决了这个问题

<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">"

进入xml,但是当我这样做时,解析时间从<1秒到超过15秒。

到目前为止,我已通过将:validating false传递给解析函数来关闭验证,但这不是最理想的。有没有办法加快速度呢?

修改:发送文件的示例:

<?xml version="1.0" encoding="utf-8"?>
<book>
  <entry>
    <id>192</id>
    <title>A book &mdash Title</title>
    <synopsis>A long-winded, multi-paragraph synopsis with unicode</synopsis>
  </entry>
</book>

错误:[row,col]处的XMLStreamException ParseError:[30,267] 消息:引用了实体“mdash”,但未声明。 com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:598)

1 个答案:

答案 0 :(得分:0)

如上所述:

  

使用DTD时解析的延迟很可能是解析器实际获取DTD,这是在本地保存DTD而不是在w3.org网站上引用DTD的最佳做法。在本地保存DTD的副本并使用本地路径引用它将加快该部分的速度。对于实体解析(mdash),实体需要成为DTD的一部分,请参阅:

     

Replace special characters like &ndash; and &mdash; occuring in an xml document with corresponding code like &#150; etc