Вопрос

Формат файла, используемый моим приложением, основан на 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])
Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

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

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

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

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

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

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

typename="тест" typ=ename="тест"

станет

typename="тест" typename="тест"

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top