Ремонт XML в C # - PullRequest
       35

Ремонт XML в C #

0 голосов
/ 11 сентября 2009

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

Я получаю исключение 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])

Ответы [ 3 ]

1 голос
/ 11 сентября 2009

Используйте регулярное выражение, чтобы сначала очистить xml.

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

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

Очевидно, это необходимо перенести на выбранный вами движок Regex:)

1 голос
/ 11 сентября 2009

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

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

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

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

Заменить на: \ 1

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

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

typename = "test" typ = ename = "test"

станет

typename = "test" typename = "test"

1 голос
/ 11 сентября 2009

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

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

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

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