オブジェクトには、次のXML
シグネチャを持つメソッドがあります。
def loadXML(source: InputSource, parser: SAXParser): Elem
これにより、を指定できますSaxParser
。次のシグネチャを持つメソッドを持つaをSaxParser
与えることができます。LexicalHandler
void startDTD(String name, String publicId, String systemId)
あなたはそれを上書きすることができます。例:
var r = ("", "", "")
val handler = new DefaultHandler2 {
override def startDTD(name:String, publicId:String, systemId:String) = {
r = (name, publicId, systemId)
}
}
val parser = SAXParserFactory.newInstance().newSAXParser()
parser.setProperty("http://xml.org/sax/properties/lexical-handler", handler)
val source = Source fromString """<?xml version="1.0"?>
<!DOCTYPE wikiarticle SYSTEM "wikiarticle.dtd">
<wikiarticle>
<art type="redirect">
<redirect>#REDIRECT[[page]]</redirect>
</art>
</wikiarticle>
"""
XML.loadXML(source, parser)
println(r) // (wikiarticle,null,wikiarticle.dtd)
dtdが必要な例を実行するには、次を使用できます。
<!ELEMENT wikiarticle (art)>
<!ELEMENT art (redirect, redirect?, article?)>
<!ATTLIST art type CDATA #REQUIRED>
<!ELEMENT redirect (#PCDATA)>
<!ELEMENT article (#PCDATA)>