1

我有一个 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 中删除这些字符。?

4

2 回答 2

0

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

于 2013-03-30T14:25:02.040 回答
0

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

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

CDATA 标记告诉 XML 解析器不要解析 和 之间的<![CDATA[字符]]>。这允许您在 XML 中包含否则会破坏解析的字符。

您可以将 CDATA 标记用于您知道(或有合理期望)该数据中的特殊字符的任何情况。

尝试在解析时处理特殊字符(没有 CDATA)将比首先简单地修复 XML 的创建(IMO)更加劳动密集(并且令人沮丧)。另外,“Norm <150 mg/dl”与“Norm 150 mg/dl”不同,这种区别对于需要该信息的人来说可能很重要。

于 2013-03-30T09:14:57.310 回答