Я пытаюсь преобразовать документ XML в другой, используя XslCompiledTransform
. Но я получаю исключение со следующим сообщением об ошибке:
По соображениям безопасности DTD запрещено в этом XML документе. Чтобы включить обработку DTD, установите для свойства DtdProcessing в XmlReaderSettings значение Parse и передайте настройки в метод XmlReader.Create.
Я уже установил свойство DtdProcessing
в XmlReaderSettings
на Parse
. Однако я все еще сталкиваюсь с тем же исключением с тем же сообщением об ошибке.
Мой пример кода:
XslCompiledTransform xslt = new XslCompiledTransform(false);
XmlReaderSettings xmlReaderSettings = new XmlReaderSettings() { DtdProcessing = DtdProcessing.Parse, ValidationType = ValidationType.DTD };
xmlReaderSettings.DtdProcessing = DtdProcessing.Parse;
xmlReaderSettings.ValidationType = ValidationType.DTD;
xmlReaderSettings.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);
using (XmlReader xsltReader = XmlReader.Create(_tesseractSettings.GetXSLTFilePath(), xmlReaderSettings))
{
xslt.Load(_tesseractSettings.GetXSLTFilePath());
xslt.Transform(inputFile, outputFile);
}
ValidationCallBack:
private static void ValidationCallBack(object sender, ValidationEventArgs e)
{
File.WriteAllText(someTxtFilePath, e.Message);
}
Если это актуально здесь - это объявления типа документа.
Входные XML:
<!DOCTYPE html PUBLIC "/W3C/DTD XHTML 1.0 Transitional/EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
XSLT-файл:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:htm="http://www.w3.org/1999/xhtml" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0" xpath-default-namespace="http://www.w3.org/1999/xhtml">
<xsl:output method="xml" omit-xml-declaration="yes"/>
Я также пробовал установить DtdProcessing в DtdProcessing.Ignore и происходит то же исключение. Я также попытался удалить элемент объявления типа документа перед преобразованием. Когда я делаю это, я больше не получаю исключения, однако преобразование не дает мне ожидаемого результата. Я знаю, что проблема не в файле xslt, потому что преобразование все еще работает в Oxygen или любом онлайн-тестере.
Я исследовал inte rnet, но безрезультатно. Любая помощь будет оценена, спасибо.