0

我在处理几乎格式良好的 XHTML 文档的数据时遇到了问题,除了它在开头有多个 DTD 声明:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    ...
  </head>
  <body>
    ...
  </body>
</html>

我需要仅使用第一个DTD 将这些数据加载到 XDocument 对象中并忽略其余声明。不可能完全忽略 DTD 处理,因为文档可能包含不寻常的字符,例如&acirc;or&euro;等​​。

文本是从外部来源检索的,我不知道为什么会这样。

显然,我加载此文档的天真尝试失败了System.Xml.XmlException : Cannot have multiple DTDs

        var xmlReaderSettings = new XmlReaderSettings
                                    {
                                        DtdProcessing = DtdProcessing.Parse,
                                        XmlResolver = new XmlPreloadedResolver(),
                                        ConformanceLevel = ConformanceLevel.Document,
                                    };
        using (var xmlReader = XmlReader.Create(stream, xmlReaderSettings))
        {
            return XDocument.Load(xmlReader);
        }

处理此类数据的最佳方法是什么?

PS:我忘了提,数据来自一个Stream可能会或可能不会使字符串操作更复杂的数据

4

1 回答 1

1

我不确定是否有 XmlReader 设置会忽略此问题,但您始终可以使用标准字符串操作来删除额外的文档类型。

于 2010-04-21T16:11:08.340 回答