проблема с новыми строками, когда я использую toprettyxml ()

В настоящее время я использую функцию toprettyxml () модуля xml.dom в сценарии python, и у меня есть некоторые проблемы с новыми символами. Если не использовать параметр newl или использовать toprettyxml (newl = '\ n'), на самом деле он отображает несколько новых строк вместо одного.

Например

f = open(filename, 'w') f.write(dom1.toprettyxml(encoding='UTF-8')) f.close() 

отображается:

 <params> <param name="Level" value="#LEVEL#"/> <param name="Code" value="281"/> </params> 

Кто-нибудь знает, откуда эта проблема, и как я могу ее использовать? FYI Я использую Python 2.6.1

  • Как я могу выводить, какие SUDs генерируют / получают?
  • Python и ElementTree: возвращает «внутренний XML», исключая родительский элемент
  • Стратегия ElementTree iterparse
  • Предотвращение использования BeautifulSoup для преобразования моих тегов XML в нижний регистр
  • Twisted XmlStream: Как подключиться к событиям?
  • Функция обмена в Openerp
  • Как вы разбираете вложенные теги XML с помощью python?
  • Может ли Python xml ElementTree проанализировать очень большой XML-файл?
  • 6 Solutions collect form web for “проблема с новыми строками, когда я использую toprettyxml ()”

    toprettyxml() довольно ужасно. Это не вопрос Windows и «\ r \ n». Попытка любой строки, поскольку параметр newl показывает, что добавлено слишком много строк. Не только это, но и другие пробелы (которые могут вызвать проблемы при машинной обработке xml).

    Некоторые обходные пути, доступные в
    http://ronrothman.com/public/leftbraned/xml-dom-minidom-toprettyxml-and-silly-whitespace

    toprettyxml(newl='') работает для меня в Windows.

    Я нашел еще одно отличное решение:

     f = open(filename, 'w') dom_string = dom1.toprettyxml(encoding='UTF-8') dom_string = os.linesep.join([s for s in dom_string.splitlines() if s.strip()]) f.write(dom_string) f.close() 

    Выше решение в основном удаляет нежелательные строки из строки dom_string, которые генерируются методом toprettyxml ().

    Входы, взятые из -> Что такое быстрый однострочный, чтобы удалить пустые строки из строки python?

    Если вы не возражаете против установки новых пакетов, попробуйте beautifulsoup. У меня был очень хороший опыт с его xml prettyfier .

    Это довольно старый вопрос, но, я думаю, я знаю, в чем проблема:

    Minidoms pretty print имеет довольно прямой метод. Он просто добавляет символы, которые вы указали в качестве аргументов. Это означает, что он будет дублировать символы, если они уже существуют.

    Например, если вы разбираете XML-файл, который выглядит так:

     <parent> <child> Some text </child> </parent> 

    есть уже символы новой строки и отступы внутри dom. Они воспринимаются как текстовые узлы по минидому и все еще существуют, когда вы разбираете его в объект dom.

    Если теперь вы перейдете к объекту dom в строку XML, эти текстовые узлы все равно будут там. Значение новых символов линии и вкладок отступа все еще остается. Используя довольно печатную версию, просто добавьте больше новых строк и больше вкладок. Вот почему в этом случае не использовать красивую печать вообще или указать newl='' приведет к желаемому результату.

    Тем не менее, вы создаете dom в своем скрипте, текстовых узлов там не будет, поэтому довольно печатать с помощью newl='\r\n' и / или addindent='\t' получится довольно красиво.

    TL; DR Отступы и новые строки остаются от синтаксического анализа, и довольно печатная версия добавляет больше

    Вы просматриваете полученный файл в Windows? Если да, попробуйте использовать toprettyxml(newl='\r\n') .

    Python - лучший язык программирования в мире.