doctype を含む XML ファイルがあります。
<!DOCTYPE someName SYSTEM "fileName.dtd">
このファイルはサードパーティから提供されたものであり、生成方法を制御することはできません。XSLT を使用して XML を変換しますが、XSLT は dtd が見つからないと文句を言います。私が持っていない dtd ファイルにアクセスしようとしないように、XSLT にそれを省略するように指示するにはどうすればよいですか。
ありがとう
doctype を含む XML ファイルがあります。
<!DOCTYPE someName SYSTEM "fileName.dtd">
このファイルはサードパーティから提供されたものであり、生成方法を制御することはできません。XSLT を使用して XML を変換しますが、XSLT は dtd が見つからないと文句を言います。私が持っていない dtd ファイルにアクセスしようとしないように、XSLT にそれを省略するように指示するにはどうすればよいですか。
ありがとう
XML パーサーの EntityResolver を、DTD が要求されたときにローカル ファイル (おそらく空のファイル) に置き換える EntityResolver に設定できます。この設定で XMLReader (パーサー) を作成し、この XMLReader を含む SAXSource を変換へのソース入力として提供します。
C#でそれを行う方法を見つけました
XmlReaderSettings x = new XmlReaderSettings();
x.DtdProcessing = DtdProcessing.Ignore;
myXslTransform.Load(xslFile);
myXslTransform.Transform(XmlReader.Create(xslFile, x), XmlWriter.Create(xmlFileOutput));
どの xslt-processor を使用していますか? 検証を無効にする方法を見つける必要があります。たとえば、Java の場合は次のようにできます: http://www.stylusstudio.com/xsllist/200205/post80150.html
ここにある主な理由: dtd には、xml コンテンツに影響するデフォルト データが含まれている可能性があります。たとえば、属性 "align" のデフォルト値が "left" の場合、xslt テンプレートの一致 "[@align='left']" は、属性が XML で発生していなくても一致します。