-->

为什么实体E不合法,而实体<是什么?(Why is entity é not valid wh

2019-10-19 12:50发布

我望着眼前的XML解析器System.Xml.Resolvers.XmlPreloadedResolver带来的表中的DTD方面,我的事实难倒了实体&lt; 通过XML阅读器,但没有实体的认可&eacute;

    private static void Main(string[] args)
    {
        string invalidContent = "<?xml version=\"1.0\" encoding=\"utf-8\"?><key value=\"char &eacute; invalid\"/>";
        string validContent = "<?xml version=\"1.0\" encoding=\"utf-8\"?><key value=\"char &lt; 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文件带来的,其他许多人。 任何想法,为什么我看到这种行为?

Answer 1:

&lt; 是在XML规范本身所限定的基本实体; &eacute; 不是。 这就是为什么你看到在行为上的差异。 (所以我期待&amp;&gt; &apos;&quot;工作过。)查看http://www.w3.org/TR/REC-xml/#sec-references

我不认为 XmlResolver是特别相关这里的XML不涉及任何其它DTD等,我不认为它的意思是用于自动导入实体没有提及任何东西的文件本身。



文章来源: Why is entity é not valid whereas entity < is?
标签: c# dtd xmlreader