我需要通过xsd验证xml文件,并在可能的情况下解析xml。我有下面的例子:Scala XML验证XSD和解析
import java.io.FileInputStream
import javax.xml.XMLConstants
import javax.xml.parsers.SAXParserFactory
import javax.xml.transform.stream.StreamSource
import javax.xml.validation.SchemaFactory
import org.xml.sax.SAXParseException
import org.xml.sax.helpers.DefaultHandler
import scala.util.Try
import scala.xml.XML
object XMLTup extends App {
val schema = {
val factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI)
val xsdStream = new FileInputStream("xsd.xsd")
val schema = factory.newSchema(new StreamSource(xsdStream))
xsdStream.close()
schema
}
val saxParser = {
val f = SAXParserFactory.newInstance()
f.setNamespaceAware(true)
f.setSchema(schema)
f.newSAXParser()
}
//DOESN'T WORK
val xml1 = new FileInputStream("xml.xml")
println {
Try{XML.withSAXParser(saxParser).load(xml1)}
}
xml1.close()
//WORKS
val xml2 = new FileInputStream("xml.xml")
val handler = new DefaultHandler() {
override def error(ex: SAXParseException) {
println("Validation Error!")
}
}
saxParser.parse(xml2, handler)
xml2.close()
}
当我使用XML阶(不工作),我得到了成功,并没有验证错误,但接下来的代码(工程)我得到了“验证错误”信息。为什么会发生?我如何使用Scala XML类通过XSD验证XML?