我期待着在使用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());
}}
发布于 2013-11-13 00:15:29
人们使用SAX所犯的最大错误是,他们没有意识到XML解析器可以随意在任何地方拆分文本节点,并对字符()回调进行多次调用。您需要将这些值累加到文本节点的末尾,标记为下一个非字符事件,例如对startElement或endElement的调用。
您谈论的是文本的“行”,但不要期望XML解析器一次将文本传递到一行。(有些解析器可能会:规范允许它,但不需要它。)
发布于 2013-11-12 21:12:06
您需要一个ignorableWhitespace()
回调。
但你的目标值得怀疑。XML不是由行组成,而是由元素和属性组成的。
发布于 2014-01-28 04:10:35
尝尝这个!使用LinkedList
在每个startElement()
上存储标记名,并在每个endElement()
上使用pollLast()
删除最后一个元素。使用String.trim()
从characters()
获取数据。因此,每次characters()
函数返回一些实际数据(使用String.length()!=0
)时,都可以将其与LinkedList
中的最后一个元素(peekLast()
)关联起来。
然后你可以选择append()
https://stackoverflow.com/questions/19945586
复制相似问题