2015-03-17 2 views
1

Я пытаюсь получить синтаксический анализ xml для scala, чтобы я мог установить EntityResolver.scala xml EntityResolver equivilent

Я делаю что-то неправильно, но я не могу найти существенную документацию. Каков правильный способ указания парсера scala на правильное расположение файла dtd?

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" 

ответ

0

Ответ в том, что главное, чтобы переопределить метод adapter в XMLLoader[T] с адаптером, который делает правильное решение, а не устанавливать EntityResolver метода parser (даже перекрывая это не работает!)

Итак, у меня есть такой класс, который, кажется, его решает

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) 
    } 
} 
Смежные вопросы