首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >scala xml EntityResolver等价物

scala xml EntityResolver等价物
EN

Stack Overflow用户
提问于 2015-03-18 01:04:52
回答 1查看 129关注 0票数 1

我一直在尝试让scala的xml解析来允许我设置EntityResolver。

我做错了什么,但是我找不到实质性的文档。将scala的解析器指向dtd文件的正确位置的正确方法是什么?

代码语言:javascript
复制
object MyXML {
  def loadFile(file: File): Node = {

    println("loadFile called")

    val parser: SAXParser = scala.xml.XML.parser
    parser.getParser.setEntityResolver(new MyXMLEntityResolver)
    // Also tried: parser.getXMLReader.setEntityResolver...    

    val inputSource = new InputSource(file.getAbsolutePath)

    val loader = scala.xml.XML.withSAXParser(parser)


    loader.loadFile(file)

    //scala.xml.XML.loadXML(inputSource, parser)
  }

  class MyXMLEntityResolver extends EntityResolver {
    override def resolveEntity(publicId: String, systemId: String): InputSource = {

      println("Resolve called!")

      new InputSource(systemId)

    }
  }
}

// prints only "loadFile called"
EN

回答 1

Stack Overflow用户

发布于 2015-03-19 06:42:31

答案是,要覆盖的重要内容是XMLLoader[T]中的adapter方法,它具有执行正确解析的适配器,而不是设置parser方法的EntityResolver (即使覆盖它也不起作用!)

所以,我有一个这样的类,它似乎可以解决这个问题

代码语言:javascript
复制
class MyXMLParser extends XMLLoader[Elem] {
 override def adapter = {
   new MyXMLAdapter
  }
}

class PhysicsXMLAdapter extends NoBindingFactoryAdapter {
  val myEntityResolver = new MyEntityResolver
  override def resolveEntity(publicId: String, systemId: String): InputSource = {
     myEntityResolver.resolveEntity(publicId, systemId)
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29105324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档