Найти строку с новой строкой или пробелом, чтобы исправить неправильный ввод XML - PullRequest
0 голосов
/ 06 марта 2012

Здравствуйте. У меня проблемы с поиском строки в файле, состоящей из следующих знаков и пробелов или новой строки.Я хочу найти сломанный тег

</answ

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

"

enter image description here

Обычно я думал, что смогу найти это по

search = i.find('</answ ') 

#or newline by:
vorkommen = i.find('</answ \n ') 

Но он возвращает и -1 ... и это неправда ...

Большое спасибо за любую помощь!

Ответы [ 2 ]

1 голос
/ 06 марта 2012

Почему вы не используете анализатор xml для поиска ошибок?

etree.fromstring(u'<foo>text</fo\no>') повышает XMLSyntaxError: expected '>', line 2, column 1, поэтому, пока вы держите свой текст в каком-то потоке, вы можете манипулировать им, чтобы удалить символ новой строки и выполнить повторный анализ.

Возникшее исключение устанавливает свойство position, а также свойство кода.

Кроме того, вы можете настроить lxml, чтобы попытаться быть более устойчивым:

In [39]: parser = etree.XMLParser(recover=True)

In [40]: etree.fromstring(u'<foo>text</fo\no>', parser)
Out[40]: <Element foo at 0x55fd798>

См .: http://lxml.de/parsing.html, а также ссылка на API на http://lxml.de/api/index.html и http://lxml.de/api.html#error-handling-on-exceptions

1 голос
/ 06 марта 2012

Вы можете расширить свой набор пробельных символов, добавив вкладки следующим образом.

import re
search = re.search(r'</answ\s', i).start()
...