当前位置: 首页 > 知识库问答 >
问题:

将XML文件解析为DOM时出错

梁新觉
2023-03-14

我尝试使用DocumentBuilderFactory解析XML文件,如下所示:

DocumentBuilderFactory ndsParserFactory = DocumentBuilderFactory.newInstance( );
ndsParserFactory.setNamespaceAware( true );
DocumentBuilder ndsParser = ndsParserFactory.newDocumentBuilder( );
Document ndsDocument = ndsParser.parse( ndsFileInputStream );

其中ndsFileInputStream是一个InputStream,包装包含XML的文件。

当文件包含Unicode字符(如Δ)时,会出现异常。当我去掉包含违规字符的行时,解析工作正常。

该文件包含特征

我想知道我是否忽略了正确配置DocumentBuilderFactory(或DocumentBuilder)实例以处理Δ字符。

编辑(来自评论):

完全公开:这是Android,我在Android应用程序中包含XML文件(具有NDS文件扩展名)作为资产。我通过AssetManager访问它们,AssetManager提供了一种方便的方法,可以将资产文件打开到InputStream中,然后将其传递给DocumentBuilder的解析方法我16小时前就开始焊接了

我注意到assets文件夹的内容默认使用CP1252编码。所以我把它改成UTF8。不走运。然后,我从一个NDS文件(每个链接)中删除了BOM表并重试。不走运。我认为APK文件(像ZIP文件一样压缩)在某种程度上破坏了非ASCII XML。我想我将不得不求助于通过其他方式把NDS文件放到Android设备上。。。


共有1个答案

常自怡
2023-03-14

您确定该文件确实是以UTF-8格式编写的吗?显然,您可以在一些编辑器中打开它,它会正确地显示文本,但它可能只是作为编码进行了很好的猜测。

要记住的另一件事是所有的字符都是UTF-8中的Unicode——当解析器碰到在声明的编码中无效的字节序列时,解析器就会窒息。UTF-8是一种非常宽容的编码,可以使用7位ASCII集中的任何字符进行编码,就像它是普通的ASCII一样,许多XML都是由普通的ASCII字符组成的。然后,当出现非ASCII的东西时,这就会让人们注意到,通过html" target="_blank">系统的文本编码路径中的缺陷突然变得明显。

您可以尝试编辑XML声明,看看它是否在另一个字符编码下解析ok;8859-7包含Δ符号——它可以用它编码吗?

还有,什么是例外?

 类似资料:
  • 问题内容: 我想解析以下网址:http : //eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi? db= nucleotide& id= 224589801 结果,我想出了以下方法: 通过这种方法,我可以获取Item节点的值,但不能获取其任何属性。我尝试使用NamedNodeMap与getAttribute()进行实验,但仍然无济于事。 为什

  • 主要内容:Java DOM解析器 解析XML文档的步骤,Java DOM解析器 解析XML文档的示例Java DOM解析器 解析XML文档的步骤 以下是使用 DOM解析器 解析文档时使用的步骤。 导入与 XML 相关的包。 创建一个文档生成器。 从文件或流创建文档 提取根元素 检查属性 检查子元素 导入 XML 相关的包 创建一个文档生成器 从文件或流创建文档 提取根元素 检查属性 检查子元素 Java DOM解析器 解析XML文档的示例 项目结构如下: input.xml文件: DomPars

  • 问题内容: 我有一个看起来像这样的XML文件: 我想将其读入python对象,类似于字典列表。因为标记是绝对固定的,所以我很想使用正则表达式(我非常擅长使用那些正则表达式)。但是,我想我会检查是否有人知道如何在此处轻松避免使用正则表达式。我对SAX或其他解析没有太多经验,但是我愿意学习。 我期待向您展示如何在不使用regexes的情况下快速完成此操作。谢谢你的帮助! 问题答案: 如果您认为正则表达

  • 我有一个XML文件,其中包含大量员工记录(比如高达1M),如下所示: 我使用JAXB将员工记录映射到以下Java对象: XML的内容不能被更改,并且给定这个XML,我如何使用JAXB将每个员工XML记录解封给员工对象,以便我可以逐个处理它?

  • 问题内容: 尝试将任何类型的XML文件转换为JSON对象结构。不同的xml文件具有不同深度的元素和子元素。当具有相同名称的元素处于相同高度时创建数组我需要一个递归函数,该函数为任何结构化XML文件创建精确的JSON对象 问题答案: }

  • 问题内容: 我有一个XML文件,例如 如何将其解析为JSON结构文件? 问题答案: 对于一个简单的解决方案,我建议使用Jackson库,它是一个Java库,用于生成和读取带有XML扩展名的JSON,因为它只需几行简单的代码就可以将任意复杂的XML转换为JSON。 input.xml Java代码: 该演示使用Jackson 1.7.7 (较新的1.7.8也可以使用),Jackson XML Dat