XML转XSL-FO执行xslt.Transform时触发DTD禁止安全异常求助
解决XML转XSL-FO时的DTD禁用异常
问题原因
默认情况下.NET出于安全考量,禁止XML文档中的DTD处理,触发的异常已经明确给出了解决方向:需要通过XmlReaderSettings配置启用DTD解析,并传入XmlReader.Create方法。
解决方案代码
// 初始化XSLT转换器 XslCompiledTransform xslt = new XslCompiledTransform(); xslt.Load("你的XSLT文件路径.xsl"); // 配置XML读取规则,开启DTD处理 XmlReaderSettings xmlSettings = new XmlReaderSettings(); xmlSettings.DtdProcessing = DtdProcessing.Parse; // 若XML依赖外部DTD文件,可添加XmlResolver(注意不可信来源的安全风险) // xmlSettings.XmlResolver = new XmlUrlResolver(); // 使用配置好的规则创建XmlReader using (XmlReader xmlReader = XmlReader.Create("目标XML文件路径.xml", xmlSettings)) { // 执行转换并输出结果 using (StreamWriter outputWriter = new StreamWriter("输出XSL-FO文件路径.fo")) { xslt.Transform(xmlReader, null, outputWriter); } }
注意事项
- 启用DTD处理存在XXE攻击风险,仅在XML来源可信的场景下使用
- 若XML包含外部DTD引用,需确保
XmlResolver配置正确,同时验证外部资源的安全性
内容的提问来源于stack exchange,提问作者priyanka manogaran
相关产品推荐
相关产品推荐

