XDocument的特殊字符

我正在尝试读取一个文件(不是XML,但结构类似),但我得到了这个例外:

'┴', hexadecimal value 0x15, is an invalid character. Line 8, position 7. 

并且文件中有很多这样的符号,我无法替换,因为我不能为了我的目的修改文件的内容…

那是代码:

 try { XDocument doc = new XDocument(new XDeclaration("1.0", "utf-16", "yes")); doc = XDocument.Load(arquivo); } catch (Exception e) { MessageBox.Show(e.Message.ToString()); } 

这是文件的一部分:

 UTF16 0000016125 0003┴300000┴English(US)PORTUGUESE┴┴bla.000┴webgui\messages\xsl\en\blabla\blabla.xlf  To blablablah the firewall to blablablah local IP address.  Para blablablah a uma blablablah local específico.   

注意:该文件没有encode xml声明。

这个XML非常糟糕;

  1. 你有0000016125 ,虽然在技术上不是非法的(它是一个Text节点),但它只是一种奇怪的东西。
  2. 您的元素包含无XML字符部分的无效字符

您可以手动规范化XML,也可以通过字符串操作或RegEx或类似方式在C#中进行规范化。

在您的简单示例中,只有元素具有无效字符; 因此修复它并使用string.Replace()方法添加CDATA部分相对简单,使它看起来像这样:

  

然后,您可以使用XDocument.Parse(string xml)将好的XML加载到XDocument

 string badXml = @"  UTF16 0000016125 0003┴300000┴English(US)PORTUGUESE┴┴bla.000┴webgui\messages\xsl\en\blabla\blabla.xlf To blablablah the firewall to blablablah local IP address.  Para blablablah a uma blablablah local específico.   "; // assuming only  element has the invalid characters string goodXml = badXml .Replace("", "", "]]>"); XDocument xDoc = XDocument.Parse(goodXml); xDoc.Declaration = new XDeclaration("1.0", "utf-16", "yes"); // do stuff with xDoc