【发布时间】:2013-03-30 07:22:49
【问题描述】:
我有一个 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 中去除这些字符?
【问题讨论】:
-
您是否有权访问创建 XML 文件的代码?
-
“我有一个 XML 文档”——不,你没有。
<150不是有效的 XML 标记。不要修复阅读器,而是检查您是否可以修复文件的生成器。否则,您将很难为这种类似 XML 但不完全的文件格式实现自己的解析器。 -
是的..我可以在创建时修复它,但现在我希望导入文件,即使它包含那些无效字符。
-
XmlException 为您提供错误的行号和位置。您可以检查异常是否是“名称不能以 X 字符开头”错误,如果是,请记住位置,使用文本阅读器打开文件,替换无效字符,然后尝试再次将其加载到 XmlDocument 中。
-
@VishalSuthar - “我可以在创建时修复它,但现在我希望导入文件,即使它包含那些无效字符。”如果您可以控制 XML 的输出(创建),我认为专注于这一点会好得多,而不是在解析它时尝试处理无效的 XML。如果您绝对需要在其中包含
<,则将该元素的内容包装在 CDATA 标记中 XML 解析器不会阻塞它。