2009-09-10 3 views
0

Формат файла, используемого моим приложением, основан на Xml. Я просто получил клиента, у которого есть неудачный xml-файл. Вещь содержит почти 90 000 строк, и по некоторым причинам примерно 20 "=" символов случайным образом перемежаются.Исправление XML в C#

Я получаю исключение XmlException для большинства из них с номером строки и положением символов, что позволяет мне находить оскорбительные символы и удалять их вручную. Я только начал писать небольшое приложение, которое автоматизирует этот процесс, но мне было интересно, есть ли лучшие способы восстановления поврежденных xml-файлов.

Пример неудачной линии:

<item name="InstanceGuid" typ=e_name="gh_guid" type_code="9">ee330f9f-a1e2-451a-8c6d-723f066a6bd4</item> 
          ↑ (this is supposed to be [type_name]) 

ответ

1

Вы можете искать любой знак равенства, не следуют двойные кавычки. Регулярное выражение (regex) было бы довольно простым для записи.

Или вы можете просто открыть файл в расширенном текстовом редакторе и выполнить поиск по тому же выражению регулярного выражения, чтобы найти и заменить/удалить. Некоторые текстовые редакторы позволяют вам находить/заменять регулярным выражением, поэтому вы можете искать любой знак равенства, за которым не следует двойная кавычка, и просто удалять его.

Конечно, я бы сохранить копию оригинала, так как если вы имели равные знаки во внутреннем XML, то это может испортить его, и т.д.

+0

Спасибо Джим, это будет найти большинство ошибок. –

1

Использование регулярных выражений для очистки XML первым.

что-то вроде:

s/([^\s"]+)=([^\s"]+="[^"]*")/\1\2/ 

Очевидно, что это необходимо будет портирована на ваш Regex двигатель выбора :)

+0

Спасибо OJ, кажется, все больше и больше моих проблем в эти дни могут быть исправлены RegEx. –

+0

Советую применять вышеуказанное заявление с осторожностью. ;) – TrueWill

+0

Без сомнения. Цель состояла в том, чтобы дать идею, а не реализацию качества продукции. Отсюда утверждение «что-то вроде» :) –

1

В TextPad, если поиск с использованием регулярных выражений = [^ "] вы найдете any = знаки, за которыми не следует «

Это должно найти места в документе, где появились знаки мошенника =. Чтобы заменить их, сначала откройте документ в TextPad. Затем нажмите F8.

В диалоговом окне введите следующие данные:

Найти: = \ ([^ "] \)

Заменить: \ 1

Проверить "Регулярные выражения" окно, выберите" Все документы "и нажмите« Заменить все »

Это должно соответствовать всем =, за которыми не следует символ« и заменить символ =, который следует за ним.

имяТипа = "Тест" Тип = ENAME = "тест"

станет

имяТипа = "тест" имяТипа = "тест"

Смежные вопросы