我創建了一個擴展了SaxParser DefaultHandler類的類。我的意圖是將XML輸入存儲在一系列對象中,同時保留原始XML數據的數據完整性。在測試過程中,我注意到一些節點數據在輸入時被任意截斷。問題使用SaxParser解析XML文檔 - 2047個字符限制?
例如:
Input: <temperature>-125</temperature> Output: <sensitivity>5</sensitivity>
Input: <address>101_State</city> Output: <address>te</address>
使事情進一步複雜化,就會出現上述錯誤「隨機」 1出來的一樣XML標籤的每〜100個實例。這意味着輸入XML文件大約有100個包含<temperature>-125</temperature>
的標籤,但其中只有一個產生了<sensitivity>5</sensitivity>
的輸出。其他標籤準確產生<sensitivity>-125</sensitivity>
。
我已覆蓋抽象「的字符(字符[] CH,INT開始,INT長度)」的方法,以簡單的抓鬥XML標籤之間的角色內容:
public void characters(char[] ch, int start, int length)
throws SAXException {
value = new String(ch, start, length);
//debug
System.out.println("'" + value + "'" + "start: " + start + "length: " + length);
}
我println語句產生以下輸出特定溫度標籤導致錯誤的輸出:
> '-12'start: 2045length: 3 '5'start:
> 0length: 1
這告訴我,該字符的方法被調用兩次這個特定的XML元素。它正被調用一次所有其他XML標籤。 secong行的「start」值表示char []字符在這個XML標記的中間被重置。然後用新的char []再次調用字符方法。
有人熟悉這個問題嗎?我想知道我是否達到了char []的能力極限。但一個快速查詢呈現這不太可能。我的char []似乎在〜被重置2047個字符
感謝,
LB
感謝的末尾添加
value = "";
。看來這個建議是正確的。 – 2009-09-29 20:27:03正確答案。另一個考慮的可能是切換到使用Stax解析器(javax.xml.stream.XMLStreamReader),並啓用「合併模式」 - 這可以提供與SAX類似的高性能,但無需手動合併文本。 – StaxMan 2014-09-08 18:22:45