【问题标题】:Android SAXParser : Not well-formed document ... That *do* is well-formedAndroid SAXParser : Not well-formed document ... *do* 格式正确
【发布时间】:2012-01-25 17:29:49
【问题描述】:

所以,我有一个启动器活动,用户在其中选择一个文件(实际上是一个目录,包含一个 .xml 和一个 .wav)。

当他点击他要打开的文件时,我会启动一个新的活动来处理之前选择的文件。

  • 向用户显示文件
  • Launcher_Activity: 点击: Other_Activity.path_dir = file.getAbsolutePath(); startActivity(Other_Activity_Intent);
  • 其他_活动: file_source = new InputSource(new StringReader( path_dir + "/xml.xml" )); parser.parse(file_source)

ParseException : 在第 1 行,第 0 列:格式不正确(无效标记)

这就像 XML 文件是空的......但是,我知道我的 path_dir 是正确的,我的 xml 文件也在正确的位置

我也知道它格式正确,因为我以前使用过它。 在应用程序的早期版本中,.xml 和 .wav 是“应用程序内”,所以我使用的是

file_source = new InputSource(getResources().openRawResource(R.raw.xml));

使用原始资源有效。 但我试图将资源放在应用程序之外 并且我的 XML 文档不再被识别...

<?xml version="1.0" encoding="utf-8"?>
<text>
    <lots of tag .../>
</text>

xml 中没有错别字...有人知道吗?


编辑:

file_source = new InputSource(new StringReader( path_dir + "/xml.xml" ));
file_source.setEncoding("UTF-8");
parser.parse(file_source);

它似乎避免了格式错误的异常......但是应用程序在其他地方崩溃了,我必须追查到哪里......

【问题讨论】:

  • 你的文件在哪里,你访问文件的方式和原始资源一样吗?
  • 文件位于:/mnt/storage/My_app_dir/an_other_dir/xml.xml path_dir 的值为:/mnt/storage/My_app_dir/an_other_dir 所以,path_dir + "/xml.xml" 是正确的位置。我正在使用以下方式访问 xml 文件:file_source = new InputSource(new StringReader( path_dir + "/xml.xml" ));
  • 如果在解析之前记录输入源是否打印正确?
  • 我不明白你说的“打印正确”是什么意思...在我开始解析之前,InputSource的值不为null,并且指向/mnt/storage/My_app_dir/an_other_dir/xml.xml...我找到了一个小问题。我会编辑那个...
  • 对不起,我的意思是,如果您在尝试解析之前记录 xml.xml 的内容,它会正确打印吗?

标签: android xml file saxparser


【解决方案1】:

尝试记录您获得的输入流。

我对InputSource不太了解,但我猜,正确读取文件存在一些问题。

尝试改用这个

FileInputStream fis = new FileInputStream(new File("文件路径)); parser.parse(fis);

【讨论】:

  • The method parse(InputSource) in the type XMLReader is not applicable for the arguments (FileInputStream) ... 这就是我使用 InputSource 的原因
  • 哎呀。嗯,无论如何,您可以从 InputStream 创建一个 InputSource。新的 InputSource(input_stream)
【解决方案2】:

将xml文件放入/assets文件夹,然后使用这一行:

parser.parse(new InputSource(getAssets().open("xml.xml")));

【讨论】:

  • 我不想将我的 XML 放在 /assets 中,因为我想将资源放在应用程序的“外部”'
  • Oromis 明确表示他“试图将资源放在应用程序之外”。
【解决方案3】:

res 目录中的 XML 文件被“预编译”成二进制形式。

这就是你得到错误的原因

ParseException : At line 1, column0: not well-formed (invalid token)

按照其他人的建议将其移动到资产目录中,您将能够以您想要的方式阅读它。提示:asset 文件夹在“应用程序之外”的程度与 res 文件夹完全相同。 IE。一点也不。

【讨论】:

    猜你喜欢
    • 2012-10-14
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多