Ajinkya
Ajinkya

Reputation: 1711

Replacing values in XML file

Our application needs to process XML files. Some times we receive XMLs with values as follows:

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

Because of &< my application is not able to load XML correctly and throwing exception as follows:

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

Now I need to replace all occurrences of &< with 'and<' so that XML can get processed successfully without any exceptions.

Upvotes: 1

Views: 5452

Answers (2)

Ajinkya
Ajinkya

Reputation: 1711

This is what I did in order to load XML with the help of answer given by Botz3000.

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

Upvotes: 5

Botz3000
Botz3000

Reputation: 39600

The Xml file is invalid, because & needs to be escaped as &amp;, so you cannot just load the xml without getting an error. You can do it if you load the file as plain text though:

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

If you have control over how the Xml file is generated though, you should fix that issue by either escaping the & as &amp; or by replacing it with "and" as you said.

Upvotes: 2

Related Questions