Как я могу заставить парсер lxml сохранять пробелы вне корневого элемента? - PullRequest
1 голос
/ 10 июня 2009

Я использую lxml для манипулирования некоторыми существующими XML-документами и хочу ввести как можно меньше различий. К сожалению, по умолчанию lxml.etree.XMLParser не сохраняет пробелы до или после корневого элемента документа:

>>> xml = '\n    <etaoin>shrdlu</etaoin>\n'
>>> lxml.etree.tostring(lxml.etree.fromstring(xml))
'<etaoin>shrdlu</etaoin>'
>>> lxml.etree.tostring(lxml.etree.fromstring(xml)) == xml
False

Возможно ли это с помощью lxml? Поддерживается ли это базовым libxml2?

Ответы [ 2 ]

1 голос
/ 11 июня 2009

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

>>> xml = '\n    <etaoin>shrdlu</etaoin>\n'
>>> head, tail = re.findall(r"^\s*|\s*$", xml)[:2]
>>> root = etree.fromstring(xml)
>>> out = head + etree.tostring(root) + tail
>>> out == xml
True
0 голосов
/ 10 июня 2009

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

...