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非常糟糕;
- 你有
,虽然在技术上不是非法的(它是一个Text节点),但它只是一种奇怪的东西。0000016125 - 您的
元素包含无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