AngleSharp使用XmlParser解析含XHTML实体的XML报错如何解决?
问题根因
你的配置本身没有错误,报错和IsResourceLoadingEnabled、WithCss()这些配置项无关。
标准XML规范仅内置5个基础实体:<、>、&、"、'。你用到的ß是XHTML DTD中定义的扩展命名实体,AngleSharp.Xml默认遵循严格XML规范,不会内置XHTML实体映射,也不会自动解析外部DTD中的实体定义,遇到未声明的实体会直接抛出解析异常。
解决方案
优先选择无外部依赖的实体注册方案,不需要修改原XML内容,稳定性和性能都更好。
方案1:内置实体映射(推荐)
AngleSharp的HTML解析模块已经内置了所有HTML/XHTML标准实体的映射,直接引入到XML解析配置中即可支持全部XHTML实体,无需加载外部DTD。
- 确保项目安装了
AngleSharp.Xml和AngleSharp.Html两个NuGet包(如果已经安装AngleSharp全量包则无需额外安装) - 使用如下配置初始化解析器:
using AngleSharp; using AngleSharp.Html.Parser; using AngleSharp.Xml; using AngleSharp.Xml.Parser; var config = Configuration.Default .WithXml() // 注册HTML标准实体表,覆盖所有XHTML命名实体 .With<AngleSharp.Dom.IEntityProvider>(new HtmlEntityProvider()) // 不需要CSS、外部资源加载可以移除对应配置,不影响实体解析 .WithCss(); var context = BrowsingContext.New(config); var xml = @"<xml><p>Maßnahmen</p></xml>"; var xmlParser = new XmlParser(new XmlParserOptions(), context); var xmlDoc = xmlParser.ParseDocument(xml); // 验证输出:p节点文本为Maßnahmen Console.WriteLine(xmlDoc.QuerySelector("p").TextContent);
如果不想引入HTML相关依赖,也可以自定义实体提供者,只注册你需要用到的实体:
public class CustomEntityProvider : AngleSharp.Dom.IEntityProvider { private readonly Dictionary<string, string> _entityMap = new() { { "szlig", "ß" }, // 按需追加其他实体,比如 对应 "\u00A0"、©对应"©" }; public string GetEntity(string name) => _entityMap.TryGetValue(name, out var val) ? val : null; } // 配置时替换为自定义provider即可 // .With<AngleSharp.Dom.IEntityProvider>(new CustomEntityProvider())
方案2:DTD引用解析(不推荐生产环境使用)
如果一定要走DTD声明的方式,需要做两个修改:
- 在XML内容头部加上XHTML DOCTYPE声明
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <xml><p>Maßnahmen</p></xml>
- 配置中开启DTD解析和外部资源加载:
var config = Configuration.Default .WithXml() .WithDtd() // 开启DTD解析能力 .WithDefaultLoader(new LoaderOptions { IsResourceLoadingEnabled = true });
注意:这种方式会主动拉取W3C服务器上的DTD文件,解析速度慢,还可能因为网络故障、W3C访问限流导致解析失败,仅适合本地测试场景使用。
关于DTD的说明
AngleSharp.Xml默认不会自动解析外部DTD引用,必须显式调用WithDtd()开启DTD解析能力、同时开启资源加载才会拉取外部DTD内容,不会自动执行实体解析逻辑。
内容的提问来源于stack exchange,提问作者Heinrich Ulbricht
相关产品推荐
相关产品推荐

