Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何解析具有多个字符实体的XML?_Java_Xml_Sax - Fatal编程技术网

Java 如何解析具有多个字符实体的XML?

Java 如何解析具有多个字符实体的XML?,java,xml,sax,Java,Xml,Sax,我有一个XML文件,说明它使用utf-8。 当我在VIM中打开文件时,我看到如下内容 <?xml version="1.0" encoding="UTF-8"?> <r> <first-tag>foo</first-tag> <second-tag> &lt;a-tag-nested-in-second-tag&gt;some data&lt;/a-tag-nested-in-second-t

我有一个XML文件,说明它使用utf-8。 当我在VIM中打开文件时,我看到如下内容

<?xml version="1.0" encoding="UTF-8"?> 
<r>
  <first-tag>foo</first-tag>
  <second-tag>
     &lt;a-tag-nested-in-second-tag&gt;some data&lt;/a-tag-nested-in-second-tag&gt;
  </second-tag>
  ...
</r>
SAX是否有办法将嵌套的转义XML数据视为真正的XML标记,而不仅仅是第二个标记的数据。在一个文件中使用多个字符编码是没有意义的,也没有任何证据表明使用了多个字符编码

您显示的是多个字符实体引用,例如
。这些都不是问题,尽管它们可能表示(有意或无意)XML标记的转义输出

问题是“XML”缺少一个根元素,因此不是

如果为标记指定一个根元素

<?xml version="1.0" encoding="UTF-8"?>
<r>
  <first-tag>foo</first-tag>
  <second-tag>
    &lt;a-tag-nested-in-second-tag&gt;some data&lt;/a-tag-nested-in-second-tag&gt;
  </second-tag>
</r>

福
a-tag-nested-in-second-tag某些数据/a-tag-nested-in-second-tag
XML解析器将能够很好地解析它


根据评论和更新的问题进行更新 SAX有没有办法将嵌套的转义xml数据视为真实数据 xml标记,而不仅仅是“第二个标记”的数据

不,没有一个简单的配置标志指示SAX将转义XML作为常规XML处理。SAX将正确地将转义的XML数据视为字符和字符实体引用。您的选择包括通过以下方式解决上游问题:

  • 消除要保留的XML转义,或
  • 对转义的XML数据进行后处理,以重新建立原始数据 XML
  • 请注意,选项#2本身可能涉及一个基于SAX的解析器,您设计该解析器的实体处理程序是为了重建原始XML


    另请参见。

    该文件的格式不正确,或者故意包含看起来像(可能是)XML的数据,但就外部文件而言不是XML。SAX似乎做得完全正确。谢谢Nathan,我编辑了我的帖子,希望能更接近我真正想问的问题。谢谢@kjhughes,我忘了提到文件确实有正确的单根元素。因此,在本例中,解析器正确地将“a-tag-nested-in-second-tag”解析为“second-tag”的内容数据,而不是将其视为结构的一部分。在我们的两个示例中,不包括初始xml声明和根元素,实际上应该有3个xml标记,但解析器仅将其作为2个标记使用,并将转义的xml数据作为第二个标记的内容数据。SAX解析它“很好”,但是文件的意图丢失了,因为如果转义的xml结构被破坏了。我编辑了我的文章,希望更接近我真正想问的问题。你的回答很有帮助。谢谢!这非常有帮助,我现在可以结束这篇文章了。