Every time I want to run XslCompiledTransform.Transform, I get an exception due to invalid characters. One of such characters is e.g. "xFFFE".
How can I remove all invalid characters in C#?
XmlConvert.IsXmlChar doesn't work because here I check every single char and "xFFFE" as single char is not an invalid char.
I run into an exception always in XslCompiledTransform.Transfor but only if "xFFFE" is in the XML doc.
Here is the code:
string document = "<?xml version=\"1.0\" encoding=\"utf-8\"?><FirstTag><Second><Third>;</Third></Second></FirstTag>";
public static string Clean(string document)
{
XmlWriterSettings writerSettings = new XmlWriterSettings();
XsltArgumentList argsList;
document = RemoveXmlNotSupportedSigns(document);
string result = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
try
{
using (StringReader sr = new StringReader(document))
{
using (StringWriter sw = new StringWriter())
{
using (XmlReader xmlR = XmlReader.Create(sr))
{
using (XmlWriter xmlW = XmlWriter.Create(sw, writerSettings))
{
Uri uri = new Uri(string.Format(CultureInfo.InvariantCulture, "{0}clean.xsl", Uri), UriKind.Relative);
argsList = new XsltArgumentList();
using (Stream xslSheet = Application.GetResourceStream(uri).Stream)
{
//Init resolver with the url of the recource path without filename
ResourceResolver resolver = new ResourceResolver(Uri);
using (XmlReader xmlReader = XmlReader.Create(xslSheet))
{
XsltSettings settings = new XsltSettings();
settings.EnableDocumentFunction = true;
// Transform
XslCompiledTransform.Load(xmlReader, settings, resolver);
XslCompiledTransform.Transform(xmlR, argsList, xmlW, resolver);
}
}
}
}
result = result + sw.ToString();
}
}
return result;
}
catch (Exception Ex)
{
return result;
}
}