将XML文件转换为单个String的问题

时间:2013-12-26 11:18:14

标签: java android xml stringbuilder

我正在从我的数据库创建一个XML文件并将其存储在内部存储中。我需要将XML文件中的数据转换为单个字符串。为此,我使用以下方法。

   BufferedReader br;
            try {
                br = new BufferedReader(new FileReader(new File(pathDAR)));
                String line;
                StringBuilder sb = new StringBuilder();

                while ((line = br.readLine()) != null) {
                    sb.append(line.trim());
                    String temp = sb.toString().substring(38);

                    Log.v("XML TO String", "" + temp);
                    Log.v("Lengths : ", "" + temp.length() + " " + sb.length());

                }
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

我一直在日志中获得字符串,但它似乎在中间突然停止。 对于例如我应该得到像这样的记录字符串。以数据库标记开头和结尾。

<database name="DAR.db"><table name="DARWorkDetails"><row><col name="id">1</col><col name="date">05-28-2013</col><col name="visited_city_ID">1264</col><col name="employee_ID">107</col><col name="work_type_ID">1</col><col name="name">null</col><col name="customer_Id">null</col><col name="customer_type_ID">null</col><col name="sub_customer_id">null</col><col name="reason_ID">14</col><col name="reason">ABM SM MEETING</col><col name="remarks">gfhii</col><col name="work_with">211,162</col><col name="IsCustomer">N</col><col name="created_by">107</col><col name="position_id">72</col><col name="designation_Id">3</col><col name="submit_date">05-28-2013</col><col name="IsFinal">null</col></row></table></database>

相反,我得到了这样的字符串:

<database name="DAR.db"><table name="DARWorkDetails"><row><col name="id">1</col><col name="date">05-28-2013</col><col name="visited_city_ID">1264</col><col name="employee_ID">107</col><col name="work_type_ID">1</col><col name="name">null</col><col name="customer_Id">null</col><col name="customer_type_ID">null</col><col name="sub_customer_id">null</col><col name="reason_ID">14</col><col name="reason">ABM SM MEETING</col><col name="remarks">gfhii</col><col name="work_with">211,162</col><col name="IsCustomer">N</col><col name="created_by">107</col><col name="position_id">72</col><col name="designation_Id">3</col><col name="submit_date">05-28-2013</col><col name="IsFinal">null</co

String正在中间停止。为了举例,我只在上面放了一些小例子字符串。实际上我的数据库有多条记录,在字符串突然结束之前,我已将字符串的长度计算到15640左右。

StringBuilder在存储字符方面有任何限制吗?我认为存在内存问题,因为我能够为少于10的记录完全获取字符串。当记录达到10以上时,似乎出现问题。任何帮助理解解决此问题都将非常感激。

2 个答案:

答案 0 :(得分:1)

请检查

可能会发生您的输出完美,但您的Log cat并未完整显示。

Log.v("XML TO String", "" + temp);
Log.v("Lengths : ", "" + temp.length() + " " + sb.length());

请参阅reference

答案 1 :(得分:1)

我创建了这个类来从保存在内部存储设备中的xml文件读取字符串,它返回一个列表,如果你想要整个扩展字符串你只需要连接到一起链接,如果没有找到该文件则返回一个空列表这就是读取XML文件并解析为Strings所需的全部内容,希望对您有帮助!

public class readXMLFile {
private String filePath = "FileStorage";
private String fileName = "File.xml";
private final String tag = "Internal Read Persistence";
File internalFileData;

public readXMLFile() {// default constructor
}

public File getXMLFile(Context context){
File directory = null;
ContextWrapper cw = new ContextWrapper(context);
directory = cw.getDir(filePath, Context.MODE_PRIVATE);
internalFileData = new File(directory, fileName);
if(internalFileData.exists()){
Log.i("ReadXMLFile","File returned");
return internalFileData;
}
else{
Log.i(tag,"the file doesn't exists!");
return null;
}
}

public List<String> readFile(Context context) {
List<String> l = new LinkedList<String>();
try {
File directory = null;
ContextWrapper cw = new ContextWrapper(context);
directory = cw.getDir(filePath, Context.MODE_PRIVATE);
internalFileData = new File(directory, fileName);

if (internalFileData.exists()) {
Log.i("Internal Data", "the root exists!!");
try {
FileInputStream fis = new FileInputStream(internalFileData);
DataInputStream in = new DataInputStream(fis);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line;
while ((line = br.readLine()) != null) {
l.add(line);
}
try {
if (in != null) {
in.close();
}
} catch (Exception e) {
Log.i(tag, "Exception closing persistence connection");
                }
} catch (Exception e) {
Log.wtf("Fatal Exception", "Exception: " + e.getMessage());
}
} else {
Log.i(tag, "File doesn't exists");
return l;//return empty list
}
} catch (Exception e) {
Log.wtf(tag, "Exception DATA READING: " + e.getMessage());
return l;
}
Log.i(tag, "file found return");
return l;
}

}