替换XML文件中的值

时间:2013-03-01 08:15:32

标签: c# xml

我们的应用程序需要处理XML文件。有时我们会收到值如下的XML:

<DiagnosisStatement>
     <StmtText>ST &</StmtText>
</DiagnosisStatement>

由于&<我的应用程序无法正确加载XML并抛出异常,如下所示:

An error occurred while parsing EntityName. Line 92, position 24.
   at System.Xml.XmlTextReaderImpl.Throw(Exception e)
   at System.Xml.XmlTextReaderImpl.Throw(String res, String arg)
   at System.Xml.XmlTextReaderImpl.Throw(String res)
   at System.Xml.XmlTextReaderImpl.ParseEntityName()
   at System.Xml.XmlTextReaderImpl.ParseEntityReference()
   at System.Xml.XmlTextReaderImpl.Read()
   at System.Xml.XmlLoader.LoadNode(Boolean skipOverWhitespace)
   at System.Xml.XmlLoader.LoadDocSequence(XmlDocument parentDoc)
   at System.Xml.XmlLoader.Load(XmlDocument doc, XmlReader reader, Boolean preserveWhitespace)
   at System.Xml.XmlDocument.Load(XmlReader reader)
   at System.Xml.XmlDocument.Load(String filename)
   at Transformation.GetEcgTransformer(String filePath, String fileType, String Manufacture, String Producer) in D:\Transformation.cs:line 160

现在我需要用{和&lt;'替换所有出现的&<这样就可以成功处理XML而不会有任何异常。

2 个答案:

答案 0 :(得分:5)

这是我在Botz3000给出的答案的帮助下加载XML所做的。

string oldText = File.ReadAllText(filePath);
string newText = oldText.Replace("&<", "and<");
File.WriteAllText(filePath, newText, Encoding.UTF8);
xmlDoc = new XmlDocument();
xmlDoc.Load(filePath);

答案 1 :(得分:2)

Xml文件无效,因为&需要作为&amp;进行转义,因此您无法在不收到错误的情况下加载xml。如果您以纯文本形式加载文件,则可以执行此操作:

string invalid = File.ReadAllText(filename);
string valid = invalid.Replace("&<", "and<");
File.WriteAllText(filename, valid);

如果您可以控制如何生成Xml文件,则应该通过将&转义为&amp;或将"and"替换为{{1}}来解决该问题。