2011-11-22 31 views
0

我正在使用SAX(javax.xml.parsers.SAXParser;)讀取XML。在這種XML,還有像一些特殊字符(&,<,>,「,」)的子節點值之間可用。所以,高達該點SAX讀取XML成功,但在這一點上,它拋出一個org.xml.sax.SAXParseException使用SAX讀取XML,跳過傳遞org.xml.sax.SAXParseException的節點

舉一個例子,在下面的示例XML,SAX最多讀取的成功的節點值,但它在引發此org.xml.sax.SAXParseException由於名稱參數的值具有在那裏<

<Parent> 
    <child1> 
     LS-23541723 
    </child1> 
    <child2 id="2" Name="T-Shirt And Denim - T<D" Rate="500.00"> 
    </child2> 
    <child3> 
     <![CDATA[This is the child 2]]> 
    </child3> 
    <child4> 
     <![CDATA[This is the child 4]]> 
    </child4> 
</Parent> 

我無法事先確定包含這些特殊字符的節點(它是透明的)。所以,我想要做的是,用SAX讀取一個XML,忽略包含這些特殊字符的節點。簡而言之,我認爲如果可以使用SAX讀取XML,可以跳過通過org.xml.sax.SAXParseException的節點來執行此操作。

這是可能的,如果是的話怎麼樣?

注:我不能簡單地與實體Refrences替換它們像&amp;以來,一些次XML節點與&lt;正在添加,&gt;以及(被作爲正在添加&lt;child1&gt;)。因此,在開始閱讀SAX之前,我將所有實體參考替換爲字符參考。(replaceAll("&gt;",">")等)

回答

0

我不認爲SAX可以處理這個問題。 XML必須格式良好。因此,在將文本提交給SAX之前,您必須進行一系列替換。查找任何不在正確位置的',"<"之間",'之間'<不屬於開始標籤或結束標籤。這應該是可行的。這是您的第一次傳球之後的第二次傳球,它們將&lt;&gt;替換爲相應的同類傳球。 理想情況下,您還應該留意備註,CDATA部分等等,以確保它們是正確的。

+0

謝謝Ikuty,其實我現在也得出這個結論。 – namalfernandolk