如何使用 XElement.Parse 解析 XML 而无需查看/将实体更改为字符?

Posted

技术标签:

【中文标题】如何使用 XElement.Parse 解析 XML 而无需查看/将实体更改为字符?【英文标题】:how to Parse XML using XElement.Parse without looking/changing Entities to characters? 【发布时间】:2012-10-24 22:40:00 【问题描述】:

有没有一种方法可以使用 XElement.Parse 解析 XML,但不会将实体转换为字符?

例子:

var xmlText = "<name><firstname>Willi&aacute;ms</firstname></name>";

如果我使用以下方法解析它:

var element = XElement.Parse(xmlText);
var firstname = element.Element("firstname");

解析后,firstname 的值现在是“Williáms”

我怎样才能忽略那些要更改的实体?

【问题讨论】:

【参考方案1】:

字符“&”在 XML 元素中是非法的。 "&" 将产生错误,因为解析器将其解释为字符实体的开始。

为了纠正,您的 Xml 应该使用 CDATA:

var xmlText = "<name><firstname><![CDATA[Willi&aacute;ms]]></firstname></name>";

【讨论】:

如果我在 XML 输入中读取这些标签,我该如何检查? @AllanRoyMalibiranBalderama:您无需检查任何内容,您的代码有效 但我打算使用 XMLViewer 预览 XML。此过程将隐藏实体... 我不确定我理解你的意思,你能详细说明你的问题吗? 我正在创建一个 WPF 程序,该程序将从 XML 中捕获一些 xml 标签以创建另一个 XML(我将其视为其元数据)。检查和验证后,用户可以在 XML 的预览中更新和编辑值。如果我们将使用此 CDATA 进程,这些实体列表将随之隐藏。

以上是关于如何使用 XElement.Parse 解析 XML 而无需查看/将实体更改为字符?的主要内容,如果未能解决你的问题,请参考以下文章

Parse 转换 将括号里面的转成Parse前面的类型

Parse 转换 将括号里面的转成Parse前面的类型

如何使用 C# 验证字符串不包含 HTML

c#中不区分大小写的XML解析器

使用JAXP进行XM解析(基于DOM)

最佳重载方法匹配有一些无效参数 C#