我的XML文件包含doctype:
<!DOCTYPE someName SYSTEM "fileName.dtd">
该文件由第三方提供,我无法控制它是如何生成的。 我使用XSLT来转换XML,但是XSLT抱怨找不到dtd;我如何告诉XSLT省略它,所以它不会尝试访问我没有的dtd文件。
由于
答案 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));