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

时间:2011-11-07 10:13:46

标签: c# xslt xslcompiledtransform

我的XML文件包含doctype:

<!DOCTYPE someName SYSTEM "fileName.dtd">

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

由于

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

了解如何为C#

执行此操作
XmlReaderSettings x = new XmlReaderSettings();
x.DtdProcessing = DtdProcessing.Ignore;
myXslTransform.Load(xslFile);
myXslTransform.Transform(XmlReader.Create(xslFile, x), XmlWriter.Create(xmlFileOutput));