使用XDocument时禁用XMLvalidation

我正在使用XDocument类解析XLIFF文档。 XDocument是否对我读入的内容执行了一些validation,如果是这样 – 是否有任何方法可以禁用该validation?

如果XLIFF不是有效的XML,我会得到一些奇怪的错误(我不在乎它不是,我只是想解析它)。

例如

'.', hexadecimal value 0x00, is an invalid character. 

我正在读这样的文件:

 string FileLocation = @"C:\XLIFF\text.xlf"; XDocument doc = XDocument.Load(FileLocation); 

谢谢。

我有类似的问题,通过让StreamReader读取内容来解决。

 // this line throws exception like yours XDocument xd = XDocument.Load(@"C:\test.xml"); // works XDocument xd = XDocument.Load(new System.IO.StreamReader(@"C:\test.xml")); 

如果这没有帮助,请尝试包含正确的编码。

如果要从无法在XML中使用的字符串中删除字符,可以使用以下方法:

 private static string RemoveXmlInvalidCharacters(string s) { return Regex.Replace( s, @"[^\u0009\u000A\u000D\u0020-\uD7FF\uE000-\uFFFD\u10000-\u10FFFF]", string.Empty); } 

根据XML标准,它会删除任何超出有效字符值集的字符。

您无法解析无效的XML,因为解析需要有效的XML结构。
当您将文件读取为UTF-8或UTF-16并且导致遇到问题时,可能会将文件读为ASCII。

可能的方法:
将文件读为UTF-8。

XLIFF文档一个XML文档。 字符0x00 不是有效的XML字符 。 无效的XML不是XML,因此您无法使用XML解析器读取它。

现在结构良好是另一回事,您可以使用SAX解析器来读取格式不正确但不是无效XML的XML。

根据XML规范的有效字符:

  #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] 

UPDATE

建议的解决方案:预处理文件以删除无效字符。 Character \0可以替换为空格,除非它具有含义(二进制),在这种情况下它需要以Base64格式。