У меня есть XML с недопустимыми шестнадцатеричными символами. Я прочитал this, this и this и любые другие ссылки, но не смогли заставить его работать.Недопустимые шестнадцатеричные символы в XML
Я использую XmlReader
- XmlDocument
, XDocument
и XmlTextReader
не мои варианты, потому что есть XML-файлы с более размером 500 ГБ и 500 миллионов в объеме. XMLReader - мой лучший выбор из-за его «прямого» подхода, а не загрузки в память всех деталей XML. Кроме того, из-за этого у меня не может быть восстановлен или загружен XML-файл только для замены недопустимых символов.
Вот код, который я работаю над:
case XmlNodeType.Element:
if (xmlReader.Name.Equals("ROW"))
{
DataRow dataRow = xmlDataTable.NewRow();
XmlReader row = XmlReader.Create(xmlReader.ReadSubtree(), new XmlReaderSettings { CheckCharacters = false
, ValidationType = ValidationType.None });
// iterate on elements inside ROW
// these are the column items
if (row != null)
{
while (row.Read())
{
if (row.IsStartElement())
{
if (!row.Name.Equals("ROW"))
{
string columnName = row.Name;
//row = XmlReader.Create(CleanInvalidXmlChars(row.ReadInnerXml()));
row.Read();
string value = CleanInvalidXmlChars(row.Value.ToString());
// all other logics ...
Исключение поднимает на row.Read();
заявление. Вот пример XML-файла, который я читаю:
<?xml version="1.0" encoding="UTF-8"?>
<MFAINSBRP>
<ROW>
<INSTITUTION_CODE>828 </INSTITUTION_CODE>
<BRANCH_CODE>GJ102</BRANCH_CODE>
<BRANCH_NAME> </BRANCH_NAME>
<BRANCH_NAME_FRENCH> </BRANCH_NAME_FRENCH>
<LANGUAGE_CODE>E</LANGUAGE_CODE>
<ADDR_NO>815412</ADDR_NO>
<FAX_AREA>0</FAX_AREA>
<FAX_PHONE>0</FAX_PHONE>
<AREA_CODE>0</AREA_CODE>
<PHONE_NO>0</PHONE_NO>
<STATUS>A</STATUS>
<PHONE_EXT>0</PHONE_EXT>
</ROW>
<!--ALL OTHER RECORDS-->
</MFAINSBRP>
Прямо сейчас, я застрял на выполнении этой работы.
EDIT:
Образец XML-файл является запись, которая делает мой код перерыв. Я скопировал его, вставил его здесь из Notepad ++, но он не показывает недопустимые символы. Вот образ того, как она выглядит в Notepad ++:
Как создать xmlReader
объект только это простое утверждение:
using (xmlReader = XmlReader.Create(filePath, new XmlReaderSettings { CheckCharacters = false }))
Где в файле это не удается? Я ожидаю, что исключение покажет вам строку/столбец. –
В этом примере XML содержится пример ввода проблемы, который нарушит ваш код? Если да, не могли бы вы выделить его каким-то образом? Если нет, можете ли вы создать образец, который * показывает * проблему? –
http://stackoverflow.com/questions/5742543/an-invalid-xml-character-unicode-0xc-was-found может быть связано.Файл ошибочен, поэтому вам нужно предварительно обработать его и сначала удалить оскорбительные символы. Возможно, вы сможете сделать это с промежуточным потоком. – jishi