我期待在使用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());
}}
答案 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()