17

Scalaを使用してxmlファイルを解析しているときにdtd仕様を無視したいことがあります。これは、Javaインターフェイスを使用して非常に簡単に実行できることを知っています。

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

dbf.setValidating(false);
dbf.setFeature("http://xml.org/sax/features/namespaces", false);
dbf.setFeature("http://xml.org/sax/features/validation", false);
dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-dtd-grammar", false);
dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);

ただし、Scalaのxmlライブラリを使用してこれを簡単に行う方法がわかりません。可能であれば、scala xmlライブラリの方がはるかに優れているので、引き続き使用したいと思います。

前もって感謝します!

4

3 に答える 3

12

これは私にとってはうまくいきますが、XML パーサーの実装に依存します。

import scala.xml.Elem
import scala.xml.factory.XMLLoader
import javax.xml.parsers.SAXParser
object MyXML extends XMLLoader[Elem] {
  override def parser: SAXParser = {
    val f = javax.xml.parsers.SAXParserFactory.newInstance()
    f.setNamespaceAware(false)
    f.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
    f.newSAXParser()
  }
}

this questionも参照してください。これは実際にはあなたの質問ですが、敵対的な方法で表現されています。

于 2012-07-03T17:39:47.123 に答える
1

まず、私は XML の専門家ではありません。なので、これは推測にすぎません...

val f = javax.xml.parsers.SAXParserFactory.newInstance()
f.setValidating(false)
val p = f.newSAXParser()
val doc = xml.XML.withSAXParser(p).load(url)
于 2012-07-03T17:19:36.480 に答える