2016-05-26 2 views
0

xpath式を評価するコードは以下のとおりです。xpathを評価している間にDTDを許可しない

String inputXml = "<?xml version=\"1.0\"?><!DOCTYPE document SYSTEM \"test.dtd\"><Request><Header><Version>1.0</Version></Header></Request>"; 

String xpath="/Request/Header/Version"; 

XPathFactory xpf = new net.sf.saxon.xpath.XPathFactoryImpl(); 
final InputSource is = new InputSource(new StringReader(inputXml)); 
String version = xpf.newXPath().evaluate(xpath, is); 

xpf.newXPath().evaluatetest.dtd couldn't be foundとしてスローエラーが発生します。私はDTDを完全に禁止したい。私はSAXParserの機能 "http://apache.org/xml/features/disallow-doctype-decl"の設定について読んできましたが、この場合にはどのように適用するのか、またはDTDを許可しない/無視する方法はありません。

+0

saxonで質問にタグを付けると、これはSaxon構成の問題のようです。 – chrisis

答えて

0

私はあなたが達成したいとは思っていません。 DTDが参照されているためにこれを失敗させたい場合は、既にそれを達成しているようです。あなたはXMLパーサのプロパティを設定する場合

しかし、2つの方法は、あなたがそれを達成することができあります

(a)はInputSourceのではなくてSAXSourceを供給してください。 SAXSourceのXMLReaderを使用するXMLパーサーに初期化し、XMLReaderのsetFeatureインターフェイスを使用してXMLReaderをXPathエンジンに渡す前に構成します。

(b)Saxon構成機能http://saxon.sf.net/feature/parserFeature?uri=http://apache.org/xml/features/disallow-doctype-decl(スペースまたは改行を含まない単一の文字列)をtrueに設定します。これを行うには

xpf.getConfiguration().setConfigurationProperty(featureName, true); 
関連する問題