我正在使用XDocument类解析XLIFF文档。 XDocument是否对我读入的内容执行了一些验证,如果是的话 - 是否有任何方法可以禁用该验证?
如果XLIFF不是有效的XML,我会收到一些奇怪的错误(我不在乎它不是,我只想解析它。)
E.g。
'.', hexadecimal value 0x00, is an invalid character.
我目前正在阅读这样的文件:
string FileLocation = @"C:\XLIFF\text.xlf";
XDocument doc = XDocument.Load(FileLocation);
感谢。
答案 0 :(得分:5)
我有类似的问题,通过让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"));
如果这没有帮助,请尝试包含正确的编码。
答案 1 :(得分:4)
如果要从XML中无效的字符串中删除字符,可以使用以下方法:
private static string RemoveXmlInvalidCharacters(string s)
{
return Regex.Replace(
s,
@"[^\u0009\u000A\u000D\u0020-\uD7FF\uE000-\uFFFD\u10000-\u10FFFF]",
string.Empty);
}
根据XML标准,它删除任何超出有效字符值集的字符。
答案 2 :(得分:2)
您无法解析无效的XML,因为解析需要有效的XML结构 当您将文件读取为UTF-8或UTF-16并且导致遇到问题时,可能会将文件读为ASCII。
可能的解决方案:
将文件读为UTF-8。
答案 3 :(得分:2)
XLIFF文档 是一个XML文档。字符0x00 不是有效的XML字符。无效的XML不是XML,因此您无法使用XML解析器读取它。
现在结构良好是另一回事,您可以使用SAX解析器来读取格式不正确但不是无效XML的XML。
符合XML规范的有效字符:
#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
建议的解决方案:预处理文件以删除无效字符。字符\0
可以替换为空格,除非它具有含义(二进制),在这种情况下它需要以 Base64 格式出现。