当使用XmlDocument.Load时,我发现如果文档引用了DTD,会建立到提供的URI的连接。有没有办法阻止这种情况发生?
经过进一步的调查,也许你应该将XmlReaderSettings对象的XmlResolver属性设置为null。
'XmlResolver用于定位和打开XML实例文档,或者定位和打开XML实例文档引用的任何外部资源。这可能包括实体、DTD或模式。'
所以代码看起来像这样:
XmlReaderSettings settings = new XmlReaderSettings();
settings.XmlResolver = null;
settings.DtdProcessing = DtdProcessing.Parse;
XmlDocument doc = new XmlDocument();
using (StringReader sr = new StringReader(xml))
using (XmlReader reader = XmlReader.Create(sr, settings))
{
doc.Load(reader);
}
正在加载的文档有DTD。
使用:
settings.ProhibitDtd = true;
settings.ValidationType = ValidationType.None;
&
-> &),而XML文件可能实际上依赖于这些声明。因此,如果您的解析器选择放弃加载DTD,并且XML使用一般实体引用,则解析可能会失败。尝试像这样:
XmlDocument doc = new XmlDocument();
using (StringReader sr = new StringReader(xml))
using (XmlReader reader = XmlReader.Create(sr, new XmlReaderSettings()))
{
doc.Load(reader);
}
XMLReader
加载文档,并将读取器设置的ValidationType
属性设置为None
。
settings.ProhibitDtd = false;
否则就完美了。谢谢! - spender