使用SAX读取XML,跳过传递org.xml.sax.SAXParseException的节点

时间:2011-11-22 07:00:05

标签: java exception-handling xml-parsing sax

我正在使用SAX(javax.xml.parsers.SAXParser;)阅读XML。在那个XML中,在子节点值中有一些特殊的字符,如(&,<,>,“,”)。所以,到那时SAX成功读取了XML,但是在这一点上它会抛出一个{ {1}}。

例如,在下面的示例XML中,SAX读取成功的节点值。但由于 Name 参数的值在 < 中,它会抛出此org.xml.sax.SAXParseException

org.xml.sax.SAXParseException

我无法确定手头包含这些特殊字符的节点。(它是dyanamic。)所以,我想做的是,用SAX读取XML,忽略包含这些特殊字符的节点。 ,如果可以使用SAX读取XML,跳过传递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> 之类的实体引用来替换它们,因为有些时候XML节点也会与&amp;&lt;一起提交(作为{{ 1}})。因此,在开始使用SAX读取它之前,我将所有实体引用替换为字符引用。(&gt;)等)

1 个答案:

答案 0 :(得分:0)

我认为SAX不能解决这个问题。 XML必须格式良好。因此,在将文本提交到SAX之前,您必须进行一系列替换。查找不在正确位置的任何'"<"之间的"''之间的<,不属于开始代码或结束代码。这应该是可行的。这是第一次传球后的第二次传球,用同等对手替换&lt;&gt;。 理想情况下,您还应该注意评论,CDATA部分等......以确保它们格式正确。