使用XMLEventReader时如何检测XML错误?

使用XMLEventReader时如何检测XML错误?,xml,scala,Xml,Scala,scala.xml.pull.XMLEventReader的文档提到它可以用作迭代器[XMLEvent]。但是,在执行此操作时,XML错误会导致方法调用没有终止。例如: scala> new xml.pull.XMLEventReader(io.Source.fromString("<a><b></a>")).toArray Exception in thread "XMLEventReader" scala.xml.parsing.FatalError

scala.xml.pull.XMLEventReader的文档提到它可以用作
迭代器[XMLEvent]
。但是,在执行此操作时,XML错误会导致方法调用没有终止。例如:

scala> new xml.pull.XMLEventReader(io.Source.fromString("<a><b></a>")).toArray
Exception in thread "XMLEventReader" scala.xml.parsing.FatalError: expected closing tag of b
    at scala.xml.parsing.MarkupParser$class.errorNoEnd(MarkupParser.scala:41)
    at scala.xml.pull.XMLEventReader$Parser.errorNoEnd(XMLEventReader.scala:56)
    at scala.xml.parsing.MarkupParserCommon$class.xEndTag(MarkupParserCommon.scala:93)
    at scala.xml.pull.XMLEventReader$Parser.xEndTag(XMLEventReader.scala:56)
    at scala.xml.parsing.MarkupParser$class.element1(MarkupParser.scala:543)
    at scala.xml.pull.XMLEventReader$Parser.element1(XMLEventReader.scala:56)
    at scala.xml.parsing.MarkupParser$class.content1(MarkupParser.scala:396)
    at scala.xml.pull.XMLEventReader$Parser.content1(XMLEventReader.scala:56)
    at scala.xml.parsing.MarkupParser$class.content(MarkupParser.scala:417)
    at scala.xml.pull.XMLEventReader$Parser.content(XMLEventReader.scala:56)
    at scala.xml.parsing.MarkupParser$class.element1(MarkupParser.scala:542)
    at scala.xml.pull.XMLEventReader$Parser.element1(XMLEventReader.scala:56)
    at scala.xml.parsing.MarkupParser$class.content1(MarkupParser.scala:396)
    at scala.xml.pull.XMLEventReader$Parser.content1(XMLEventReader.scala:56)
    at scala.xml.parsing.MarkupParser$class.document(MarkupParser.scala:216)
    at scala.xml.pull.XMLEventReader$Parser.document(XMLEventReader.scala:56)
    at scala.xml.pull.XMLEventReader$Parser$$anonfun$run$1.apply(XMLEventReader.scala:90)
    at scala.xml.pull.XMLEventReader$Parser$$anonfun$run$1.apply(XMLEventReader.scala:90)
    at scala.xml.pull.ProducerConsumerIterator$class.interruptibly(XMLEventReader.scala:113)
    at scala.xml.pull.XMLEventReader.interruptibly(XMLEventReader.scala:26)
    at scala.xml.pull.XMLEventReader$Parser.run(XMLEventReader.scala:90)
    at java.lang.Thread.run(Thread.java:680)

scala>new-xml.pull.XMLEventReader(io.Source.fromString(“)。是否有可能在调用线程上重新引发这些异常?该类是否打算使用,或者我是否应该使用另一个pull解析器?

我也遇到了这个问题;某个地方有一个补丁版本(在我自己的代码库中还找不到链接),我们用了一段时间来解决这个问题,然后完全放弃了它。

我也遇到了这个问题;那里有一个补丁版本(在我自己的代码库中还找不到链接),我们用了一段时间来解决这个问题,然后完全放弃它。

如果您正在寻找pull解析和Scala,您可能应该签出

特别是在这种情况下,拉式解析由实际的拉式解析器(jdk stax)驱动,可以插入实际使用的XMLInputFactory,从而允许您根据stax标准api定制错误处理或文档处理

再加上迭代器和迭代器都能进行解析,您就可以灵活地处理文档了

下一个版本0.5还将尝试使用提供完全异步处理

您的实际示例将转换为:

import scales.xml._
import ScalesXml._

try{
  val s = pullXml(new java.io.StringReader("<a><b></a>")).toArray
} finally {
  println("Same thread")
}
import scales.xml_
导入scalexml_
试一试{

val s=pullXml(新的java.io.StringReader(“

如果您正在寻找pull解析和Scala,您可能应该签出

特别是在这种情况下,拉式解析由实际的拉式解析器(jdk stax)驱动,可以插入实际使用的XMLInputFactory,从而允许您根据stax标准api定制错误处理或文档处理

再加上迭代器和迭代器都能进行解析,您就可以灵活地处理文档了

下一个版本0.5还将尝试使用提供完全异步处理

您的实际示例将转换为:

import scales.xml._
import ScalesXml._

try{
  val s = pullXml(new java.io.StringReader("<a><b></a>")).toArray
} finally {
  println("Same thread")
}
import scales.xml_
导入scalexml_
试一试{

val s=pullXml(新java.io.StringReader("

你能告诉我你去了哪里吗?只是JDK中的pull解析器?我们用它导入Excel文件,首先将其保存为Excel的XML格式。过了一会儿,我们放弃了,保存为原生Excel格式,然后用Apache POI读取。在其他地方,我只是使用StAX解析器,有一种情况下。你能告诉我吗告诉我你去了哪里?只是JDK中的pull解析器?我们使用它导入Excel文件,首先将其保存为Excel的XML格式。过了一段时间,我们放弃了,保存为原生Excel格式,然后使用Apache POI阅读。在其他地方,我只是使用StAX解析器,在一个例子中。