java如何在使用SAX parcer解析给定xml文件时存储每一行
我期待着在使用Java中的SAX解析器解析XML文件时,将每一行存储为一个验证特定条件的代码
问题:当我将字符[]转换为带有字符(…)的新字符串时方法,我没有正确获取行文本
预期:需要在字符串变量中存储一行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());
}}
# 1 楼答案
人们在使用SAX时犯的第一个错误是,他们没有意识到XML解析器可以在任何地方随意分解文本节点,并对characters()回调进行多次调用。您需要累积这些值,直到文本节点结束,并由下一个非字符事件标记,例如调用startElement或endElement
您谈论文本的“行”,但不要期望XML解析器一次只传递一行文本。(一些解析器可能会这样做:规范允许但不需要它。)
# 2 楼答案
你需要一个^{} 回调
但你的目标值得怀疑。XML不是由行组成的,它由元素和属性组成
# 3 楼答案
试试这个!使用
LinkedList
在每个startElement()
处存储标记名,并在每个endElement()
处使用pollLast()
删除最后一个元素。使用String.trim()
从characters()
获取数据。因此,每当characters()
函数返回一些实际数据(使用String.length()!=0
)时,您可以将其与LinkedList
中的最后一个元素(peekLast()
)相关联然后你可以选择
append()
它