如何解决XML 解析器错误:引用了实体“percnt”,但未声明
当我执行下面解析 XML 的程序时,我收到以下错误消息:
org.xml.sax.SAXParseException;行号:2;列数:31;实体“percnt”已被引用,但未声明。
import java.io.StringReader
import javax.xml.parsers.{SAXParser,SAXParserFactory}
import org.xml.sax.{ErrorHandler,InputSource,SAXParseException,XMLReader}
import scala.util.{Failure,Success,Try}
object Test extends App {
val xml = """<?xml version="1.0" encoding="utf-8"?>
<title>"100 % "</title>"""
check(xml) match {
case Success(_) => println("Success!")
case Failure(exc) => println(exc.toString)
}
def check(xml: String): Try[String] = {
Try {
val factory = SAXParserFactory.newInstance()
factory.setValidating(false)
factory.setNamespaceAware(false)
//factory.setSchema(null)
val parser: SAXParser = factory.newSAXParser()
val reader: XMLReader = parser.getXMLReader
val handler: SimpleErrorHandler = new SimpleErrorHandler()
reader.setErrorHandler(handler)
reader.parse(new InputSource(new StringReader(xml)))
handler.getErrMsg.getorElse("")
}
}
}
class SimpleErrorHandler extends ErrorHandler {
var errMsg = ""
def warning(e: SAXParseException): Unit = {
errMsg = e.getMessage
}
def error(e: SAXParseException): Unit = {
errMsg = e.getMessage
}
def fatalError(e: SAXParseException): Unit = {
errMsg = e.getMessage
}
def getErrMsg: Option[String] = if (errMsg.isEmpty) None else Some(errMsg)
}
我的问题:
- 我应该如何在 XML 文件中声明实体?似乎所有标点符号都不起作用。
- 如何禁用程序中的实体检查(我尝试了 factory.setValidating(false) 和 factory.setNamespaceAware(false) 但没有奏效)
谢谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。