我想從Scala中的InputStream
加載XML文檔。因此我使用scala.xml.XML.load(is: InputStream): scala.xml.Elem
。關閉scala.xml.XML的DTD驗證
XML文檔是來自Potrace,看起來像這樣一個SVG文件:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="10.000000pt" height="10.000000pt" viewBox="0 0 10.000000 10.000000"
preserveAspectRatio="xMidYMid meet">
<metadata>
Created by potrace 1.11, written by Peter Selinger 2001-2013
</metadata>
<g transform="translate(0.000000,10.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M14 73 c2 -10 11 -20 20 -21 13 -3 17 2 14 14 -4 25 -37 31 -34 7z"/>
<path d="M67 83 c-4 -3 -7 -15 -7 -25 0 -13 -7 -18 -26 -18 -14 0 -23 -4 -19
-10 17 -28 75 9 75 47 0 14 -12 17 -23 6z"/>
<path d="M74 21 c-5 -5 -22 -11 -39 -14 -27 -4 -27 -4 7 -6 20 0 40 4 43 10 9
14 1 21 -11 10z"/>
</g>
</svg>
我的問題是,在解析InputStream的大約需要15秒,這是煩人。
我想通了,當我從文件中刪除<!DOCTYPE>
沒有任何延遲。因此,底層SAXParser
可能會下載<!DOCTYPE>
中的DTD,以檢查文檔是否有效。
如何配置Scala的XML.load
(可能通過使用XML.withSAXParser
)不驗證文檔?
我可以確認XML.load和XML.loadString正在每個分析下載DTD。託管DTD的服務器出現故障時,我開始因503錯誤而導致解析失敗。 :( – Jono