首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在使用SAX parcer解析给定的xml文件时存储每一行

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

Stack Overflow用户
提问于 2013-11-12 20:52:37
回答 3查看 192关注 0票数 0

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

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

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

代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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());
}}
EN

回答 3

Stack Overflow用户

发布于 2013-11-13 00:15:29

人们使用SAX所犯的最大错误是,他们没有意识到XML解析器可以随意在任何地方拆分文本节点,并对字符()回调进行多次调用。您需要将这些值累加到文本节点的末尾,标记为下一个非字符事件,例如对startElement或endElement的调用。

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

票数 1
EN

Stack Overflow用户

发布于 2013-11-12 21:12:06

您需要一个ignorableWhitespace()回调。

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

票数 0
EN

Stack Overflow用户

发布于 2014-01-28 04:10:35

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

然后你可以选择append()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19945586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文