2016-04-05 2 views
1

У меня есть файл XML, который я пытаюсь обработать с помощью питонас помощью UNIX удалить возврат каретки встроенный в XML-тексте

Я получаю ошибки, как случайн некоторые из текста в строках XML заставил каретка возвращается в их

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

пример XML-сценарий, который я могу разобрать:

<?xml version="1.0"?><script startAt="2015-03-25T20:59:38Z" sessionId="xyz"><message attribute= 'hello world, i am not going to add a cariage return right now'></message></script> 

Пример XML-сценарий, который я не могу разобрать из-за возврата каретки:

<?xml version="1.0"?><script startAt="2015-03-25T20:59:38Z" sessionId="xyz"> 
<message attribute= 'hello world, i am going to add a cariage return 
right now 
even though 
i do not have to'></message></script> 

Мой окончательный вывод после разбора будет выглядеть примерно так:

<?xml version="1.0"?><script startAt="2015-03-25T20:59:38Z" sessionId="xyz"><message attribute = 'hello world, i am not going to add a cariage return right now'></message></script> 
<?xml version="1.0"?><script startAt="2015-03-25T20:59:38Z" sessionId="xyz"><message attribute= 'hello world, i am going to add a cariage return right now even though i do not have to'></message></script> 

То, что я не хочу , состоит в том, чтобы удалить ВСЕ возвращения каретки, потому что мой окончательный результат будет выглядеть так:

<?xml version="1.0"?><script startAt="2015-03-25T20:59:38Z" sessionId="xyz"><message attribute= 'hello world, i am not going to add a cariage return right now'></message></script><?xml version="1.0"?><script startAt="2015-03-25T20:59:38Z" sessionId="xyz"><message attribute = 'hello world, i am going to add a cariage return right now even though i do not have to'></message></script> 
+0

xml.Etree, LXML –

+0

Удалить с новой строки 'тр -d«\ n'' –

ответ

0

Прежде всего, пример не является допустимым xml. Это может быть либо это:

<?xml version="1.0"?><script startAt="2015-03-25T20:59:38Z" sessionId="xyz"> 
<message attribute = 'hello world, i am going to add a cariage return 
right now 
even though 
i do not have to'/></script> 

или это:

<?xml version="1.0"?><script startAt="2015-03-25T20:59:38Z" sessionId="xyz"> 
<message>hello world, i am going to add a cariage return 
right now 
even though 
i do not have to</message></script> 

И я также предполагаю, что вы хотите удалить \n не возврат каретки.

Попробуйте эту функцию:

import re 
from lxml import etree 

def removeEndl(xml): 
    root = etree.XML(xml) 

    for element in root.xpath('//*'): 
     if element.text is not None: 
     element.text = re.sub(r'\r?\n', '', element.text) 
     for key, value in element.attrib.iteritems(): 
     element.attrib[key] = re.sub(r'\r?\n', '', value) 

    return etree.tostring(root) 
+0

я хочу, чтобы удалить \ п, но когда я отобразить данные xml в блокноте ++, \ n не отображается как \ n, он отображается как CRLF – shecode

+0

Когда вы открываете файл с python, CRLF преобразуется в LF. В любом случае я отредактировал код, чтобы использовать регулярное выражение, которое удаляет CRLF или LF. – apr

+0

«Когда вы открываете файл с python, CRLF преобразуется в LF». Ложь. Это происходит только в том случае, если вы укажете универсальный режим новой строки, например, @sebastian. – pydsigner

0

Вы могли бы также использовать поддержку питона для universal new lines, при открытии файла XML. Это заставило бы python заменить любые \r\n и \r на \n.

Чтобы использовать его, просто добавьте U к file open mode в:

import elementtree.ElementTree as ET 
with open('my.xml', 'rU') as myxml: 
    ET.parse(myxml) 
Смежные вопросы