在应用XSLT时省略XML的doctype声明

本文关键字:doctype 声明 XML 应用 XSLT 时省 | 更新日期: 2023-09-27 18:13:45

我有一个包含doctype的XML文件:

<!DOCTYPE someName SYSTEM "fileName.dtd">

该文件是由第三方提供的,我无法控制它是如何生成的。我使用XSLT来转换XML,但是XSLT抱怨找不到dtd;我如何告诉XSLT提交它,这样它就不会试图访问我没有的dtd文件。

谢谢

在应用XSLT时省略XML的doctype声明

您可以将XML解析器的EntityResolver设置为在请求DTD时替换本地文件(可能是空文件)的EntityResolver。使用此设置创建XMLReader(解析器),然后提供包含此XMLReader的SAXSource作为转换的源输入。

您使用哪种xslt处理器?您必须找到一种方法来禁用对它的验证。例如,对于Java,你可以这样做:http://www.stylusstudio.com/xsllist/200205/post80150.html

它在这里的主要原因是:dtd可能具有影响xml内容的默认数据。例如,如果属性"align"具有默认值"left",则xslt模板匹配"[@align='left']"将匹配,即使该属性在XML中不存在。

了解如何使用c#

XmlReaderSettings x = new XmlReaderSettings();
x.DtdProcessing = DtdProcessing.Ignore;
myXslTransform.Load(xslFile);
myXslTransform.Transform(XmlReader.Create(xslFile, x), XmlWriter.Create(xmlFileOutput));