Bilgi paylaştıkça değerlenir...!

Xslt compile problemi

For security reasons DTD is prohibited in this XML document. To enable DTD processing set the DtdProcessing property on XmlReaderSettings to Parse and pass the settings into XmlReader.Create method.

Eğer XslCompiledTransform nesnesinin transform methodunu cağırırken yukarıdaki  gibi bir hata ile karşılaşırsanız. Sebebi ve çözümü aşağıdaki gibidir.

 

Yukarıdaki hatanın sebebi xslt nizin içinde  <!DOCTYPE xsl:stylesheet []> şeklinde bir style eklemişsiniz ve transformasyonda bunu parse etme ayarini set etmemişsiniz demektir. Bu yüzden yukarıdaki hatayı alıyorsunuz. Çözümü için aşağıdaki kod parçasını kodunuza eklemeniz yeterli olacaktır.

XmlReaderSettings settings = new XmlReaderSettings();

settings.DtdProcessing = DtdProcessing.Parse;

 

Örnek:

XmlReaderSettings settings = new XmlReaderSettings();
settings.DtdProcessing = DtdProcessing.Parse;

XslCompiledTransform transform = new XslCompiledTransform();
StringReader xsltStringReader = new StringReader(inputXsltString);
XmlReader xsltXmlReader = XmlReader.Create(xsltStringReader, settings);
transform.Load(xsltXmlReader);
StringReader inputXmlStringReader = new StringReader(inputXmlString);
XmlReader inputXmlReader = XmlReader.Create(inputXmlStringReader);
StringWriter results = new StringWriter();
transform.Transform(inputXmlReader, null, results);