【发布时间】:2014-04-13 15:46:31
【问题描述】:
我正在查看 xml 解析器 System.Xml.Resolvers.XmlPreloadedResolver 在 dtds 方面带来的内容,但我被 xml 阅读器识别实体 < 而不是实体 é 的事实难住了.
private static void Main(string[] args)
{
string invalidContent = "<?xml version=\"1.0\" encoding=\"utf-8\"?><key value=\"char é invalid\"/>";
string validContent = "<?xml version=\"1.0\" encoding=\"utf-8\"?><key value=\"char < valid\"/>";
XmlDocument xmlDocument = new XmlDocument();
var xmlReaderSettings = new XmlReaderSettings()
{
DtdProcessing = DtdProcessing.Parse,
XmlResolver = new XmlPreloadedResolver(XmlKnownDtds.All),
ProhibitDtd = false
};
using (XmlReader reader = XmlReader.Create(new StringReader(invalidContent), xmlReaderSettings))
{
xmlDocument.Load(reader); // reference to undeclared entity 'eacute'
}
using (XmlReader reader = XmlReader.Create(new StringReader(validContent), xmlReaderSettings))
{
xmlDocument.Load(reader); //
}
}
检查 XmlPreloadedResolver 我可以看到 XmlKnownDtds.All 应该引入包含 eacute 实体以及许多其他实体的 xhtml-lat1.ent 文件。知道为什么我会看到这种行为吗?
【问题讨论】: