Отключить проверку XML при использовании XDocument - PullRequest
4 голосов
/ 31 марта 2011

Я анализирую документ XLIFF , используя класс XDocument.Выполняет ли XDocument некоторую проверку содержимого, которое я в него прочитал, и, если да, есть ли способ отключить эту проверку?

Я получаю некоторые странные ошибки, если XLIFF не является допустимым XML (яМне все равно, что это не так, я просто хочу разобрать).

Например

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

Я сейчас читаю файл так:

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

Спасибо.

Ответы [ 4 ]

5 голосов
/ 31 марта 2011

У меня была похожая проблема, которая была устранена, когда 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"));

Если это не помогает, попробуйте включить правильное кодирование.

4 голосов
/ 18 июля 2012

Если вы хотите удалить символы из строк, которые являются недопустимыми для использования в XML, вы можете использовать этот метод:

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

Он удаляет все символы, которые выходят за пределы набора допустимых значений символов, в соответствии ск стандарту XML.

2 голосов
/ 31 марта 2011

XLIFF-документ - это XML-документ. Символ 0x00 не является допустимым символом XML . Неверный XML не является XML, поэтому вы не можете прочитать его с помощью анализаторов XML.

Теперь правильная форма - это совсем другое: вы можете использовать SAX-парсеры для чтения XML, который не является правильно сформированным, но не является недействительным XML.

Допустимые символы в соответствии со спецификацией XML:

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

UPDATE

Предлагаемое решение: предварительно обработать файлы, чтобы удалить недопустимые символы. Символ \0 может быть заменен пробелом, если он не имеет значения (является двоичным), и в этом случае он должен быть представлен в формате Base64 .

2 голосов
/ 31 марта 2011

Нельзя проанализировать недопустимый XML, потому что для синтаксического анализа требуется правильная структура XML.
Возможно, вы прочитали файл как ASCII, когда вы должны были прочитать его как UTF-8 или UTF-16, и этоприводит к проблеме, с которой вы столкнулись.

Возможное решение:
Считать файл как UTF-8.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...