带& lt;来自XML内容的字符

本文关键字:字符 XML 来自 lt | 更新日期: 2023-09-27 18:06:30

我有一个XML文档,其中包含<字符的数据。

<Tunings>
    <Notes>Norm <150 mg/dl</Notes>
</Tunings>

我使用的代码是:

StreamReader objReader = new StreamReader(strFile);
string strData = objReader.ReadToEnd();
XmlDocument doc = new XmlDocument();
// Here I want to strip those characters from "strData"
doc.LoadXml(strData);

给出错误:

名称不能以'1'开头,十六进制值为0x31。

那么是否有一种方法可以在Load调用之前从XML中剥离这些字符?

带& lt;来自XML内容的字符

如果这只发生在<Notes>部分,我建议修改XML文件的创建,使用CDATA标记包含Notes中的文本,如下所示:

<Notes><![CDATA[Norm <150 mg/dl]]></Notes>

CDATA标签告诉XML解析器不要解析<![CDATA[]]>之间的字符。这允许您在XML中使用一些字符,否则将中断解析。

如果您知道(或有合理的期望)数据中有特殊字符,则可以使用CDATA标记。

尝试在解析时处理特殊字符(没有CDATA)将比简单地在第一时间修复XML的创建更加耗费人力(并且令人沮丧)。另外,"Norm <150 mg/dl"answers"Norm 150 mg/dl"是不同的,这种区别对于需要这些信息的人来说可能很重要。

如注释所述,您没有XML文档。如果您知道这些文档偏离合法XML的唯一方式与示例中一样,则可以通过正则表达式运行该文件,并用&amp;替换<(?:'d)。这将找到与数字相邻的<并对其进行正确编码。