[英]Disable XML validation when using XDocument
我正在使用XDocument类解析XLIFF文档。 XDocument是否对我读入的内容执行了一些验证,如果是这样 - 是否有任何方法可以禁用该验证?
如果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]
建议的解决方案:预处理文件以删除无效字符。 Character \\0
可以替换为空格,除非它具有含义(二进制),在这种情况下它需要以Base64格式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.