Python xml minidom. генерирует <текст> Некоторый текст </текст> элемент

Client ID должно быть тем из существующего приложения AD, а не нового сгенерированного GUID.

Измените его, тогда все будет в порядке.

enter image description here

9
задан Orjanp 3 February 2009 в 14:59
поделиться

4 ответа

Это может легко быть сделано?

Это зависит, какое точное правило Вы хотите, но обычно не, Вы получаете мало контроля над симпатичной печатью. Если Вы хотите определенный формат, необходимо будет обычно писать собственному Уокеру.

Уровень 3 DOM структурная распечатка программы формата параметра LS в pxdom прибывает достаточно близкий к Вашему примеру. Его правило состоит в том, что, если элемент содержит только единственный TextNode, никакой дополнительный пробел не будет добавлен. Однако это (в настоящее время) использует два пробелов для отступа, а не четыре.

>>> doc= pxdom.parseString('<a><b>c</b></a>')
>>> doc.domConfig.setParameter('format-pretty-print', True)
>>> print doc.pxdomContent
<?xml version="1.0" encoding="utf-16"?>
<a>
  <b>c</b>
</a>

(Скорректируйте формат кодирования и выходной формат для любого типа сериализации, которую Вы делаете.)

Если это - правило, Вы хотите, и можно выйти сухим из воды, Вы могли бы также смочь к Element.writexml minidom's патча обезьяны, например:

>>> from xml.dom import minidom
>>> def newwritexml(self, writer, indent= '', addindent= '', newl= ''):
...     if len(self.childNodes)==1 and self.firstChild.nodeType==3:
...         writer.write(indent)
...         self.oldwritexml(writer) # cancel extra whitespace
...         writer.write(newl)
...     else:
...         self.oldwritexml(writer, indent, addindent, newl)
... 
>>> minidom.Element.oldwritexml= minidom.Element.writexml
>>> minidom.Element.writexml= newwritexml

Все обычные протесты о вредности исправления обезьяны применяются.

7
ответ дан 4 December 2019 в 21:12
поделиться

pyxml предложения простое решение этого при помощи xml.dom.ext. PrettyPrint () функция. Это может также распечатать к дескриптору файла.

Но pyxml пакет больше не сохраняется.

Oerjan Pettersen

0
ответ дан 4 December 2019 в 21:12
поделиться

Я искал то же самое и наткнулся на этот пост. (отступ, предоставленный в xml.dom.minidom, сломал другой инструмент, который я использовал для управления XML, и мне нужно было, чтобы он был с отступом) Я попробовал принятое решение с немного более сложным примером, и это был результат:

In [1]: import pxdom

In [2]: xml = '<a><b>fda</b><c><b>fdsa</b></c></a>'

In [3]: doc = pxdom.parseString(xml)

In [4]: doc.domConfig.setParameter('format-pretty-print', True)

In [5]: print doc.pxdomContent
<?xml version="1.0" encoding="utf-16"?>
<a>
  <b>fda</b><c>
    <b>fdsa</b>
  </c>
</a>

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

Я записываю вывод в файл, поэтому могу использовать программу xmlindent для Ubuntu ($ sudo aptitude install xmlindent). Поэтому я просто записываю неформатированное в файл, а затем вызываю xmlindent из программы python:

from subprocess import Popen, PIPE
Popen(["xmlindent", "-i", "2", "-w", "-f", "-nbe", file_name], 
      stderr=PIPE, 
      stdout=PIPE).communicate()

Параметр -w приводит к перезаписи файла, но досадно оставляет имя, например, "myfile.xml ~", которое вы, вероятно, захотите удалить. Другие переключатели предназначены для правильного форматирования (для меня).

PS xmlindent - это средство форматирования потока, то есть вы можете использовать его следующим образом:

cat myfile.xml | xmlindent > myfile_indented.xml

Таким образом, вы можете использовать его в скрипте Python без записи в файл, если вам это необходимо.

2
ответ дан 4 December 2019 в 21:12
поделиться

Это решение сработало для меня без исправления обезьяны или прекращения использования минидома:

from xml.dom.ext import PrettyPrint
from StringIO import StringIO

def toprettyxml_fixed (node, encoding='utf-8'):
    tmpStream = StringIO()
    PrettyPrint(node, stream=tmpStream, encoding=encoding)
    return tmpStream.getvalue()

http://ronrothman.com/public/leftbraned/xml-dom -minidom-toprettyxml-and-silly-whitespace / # лучшее-решение

0
ответ дан 4 December 2019 в 21:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: