0

doctype を含む XML ファイルがあります。

<!DOCTYPE someName SYSTEM "fileName.dtd">

このファイルはサードパーティから提供されたものであり、生成方法を制御することはできません。XSLT を使用して XML を変換しますが、XSLT は dtd が見つからないと文句を言います。私が持っていない dtd ファイルにアクセスしようとしないように、XSLT にそれを省略するように指示するにはどうすればよいですか。

ありがとう

4

3 に答える 3

2

XML パーサーの EntityResolver を、DTD が要求されたときにローカル ファイル (おそらく空のファイル) に置き換える EntityResolver に設定できます。この設定で XMLReader (パーサー) を作成し、この XMLReader を含む SAXSource を変換へのソース入力として提供します。

于 2011-11-07T12:25:19.517 に答える
0

C#でそれを行う方法を見つけました

XmlReaderSettings x = new XmlReaderSettings();
x.DtdProcessing = DtdProcessing.Ignore;
myXslTransform.Load(xslFile);
myXslTransform.Transform(XmlReader.Create(xslFile, x), XmlWriter.Create(xmlFileOutput));
于 2011-11-14T09:53:44.710 に答える
0

どの xslt-processor を使用していますか? 検証を無効にする方法を見つける必要があります。たとえば、Java の場合は次のようにできます: http://www.stylusstudio.com/xsllist/200205/post80150.html

ここにある主な理由: dtd には、xml コンテンツに影響するデフォルト データが含まれている可能性があります。たとえば、属性 "align" のデフォルト値が "left" の場合、xslt テンプレートの一致 "[@align='left']" は、属性が XML で発生していなくても一致します。

于 2011-11-07T11:18:46.720 に答える