如何在使用SAX解析器解析给定的xml文件时存储每一行

时间:2013-11-13 04:52:38

标签: java xml saxparser

我期待在使用Java中的SAX解析器解析XML文件时,为每一行存储验证特定条件。

问题当我将字符[]转换为带解析器的Characters(...)方法的新字符串时,我没有正确获取行文字。

预期:需要在String变量中存储一行XML文件。

代码:

public void characters(char[] arg0, int arg1, int arg2) throws SAXException {
if (text) {
String str = new String(arg0,arg1,arg2);
System.out.println(str.trim());
}}

3 个答案:

答案 0 :(得分:1)

人们使用SAX犯的第一个错误是他们没有意识到XML解析器可以自由地在任何地方分解文本节点并对characters()回调进行多次调用。您需要累积这些值,直到文本节点结束,由下一个非字符事件标记,例如,对startElement或endElement的调用。

您谈到文本的“行”,但不要指望XML解析器一次将文本传递到一行。 (有些解析器可能:规范允许但不需要它。)

答案 1 :(得分:0)

您需要ignorableWhitespace()回调。

但你的目标值得怀疑。 XML不包含行,它由元素和属性组成。

答案 2 :(得分:0)

试试这个!使用LinkedList将标记名称存储在每个startElement(),并使用pollLast()endElement()删除最后一个元素。使用String.trim()characters()获取数据。因此,每次characters()函数返回一些实际数据(使用String.length()!=0)时,您都可以将其与peekLast()

中的最后一个元素(LinkedList)相关联

然后您可以选择append()