有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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());
}}

共 (3) 个答案

  1. # 1 楼答案

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

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

  2. # 2 楼答案

    你需要一个^{}回调

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

  3. # 3 楼答案

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

    然后你可以选择append()