2010-05-05 4 views
4

Я пытаюсь вывести файл XML с помощью Python и LXMLЗакрыть тег без текста в LXML

Однако, я заметил одну вещь, что если тег не имеет никакого текста, он не закрывает себя. Примером этого может быть:

root = etree.Element('document') 
rootTree = etree.ElementTree(root) 
firstChild = etree.SubElement(root, 'test') 

Выход этого:

<document> 
<test/> 
</document 

Я хочу выход быть:

<document> 
<test> 
</test> 
</document> 

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

+0

Не можете ли вы установить значение в новую строку? Это означало бы, что 'test' будет иметь дочерний узел типа text со значением' \ n'. –

+0

Спасибо, но я не знал, что эквивалентен и что это принятая норма для этого. Фрэнк ответил на мой вопрос, но если возникнет необходимость, я всегда могу использовать \ n. – user225312

ответ

7

Обратите внимание, что <test></test> и <test/> означает точно такое же. Вы хотите, чтобы тестовый тег действительно имел текст, состоящий из одного разрыва строки. Однако пустой тег без текста обычно записывается как <test/>, и очень мало смысла настаивать на том, чтобы он отображался как <test></test>.

+0

О, спасибо. Я не знал об этом. Я думал сохранить согласованность, если тег не имел текста, но имел какой-то атрибут, было обязательно закрыть его. – user225312

2

Использование lxml.html.tostring для сериализации в HTML

import lxml.html 
root = lxml.html.fromstring(mydocument) 
print(lxml.html.tostring(root)) 
3

Для уточнения @ymv ответ в случае, если это может оказаться полезным для других:

from lxml import etree 

root = etree.Element('document') 
rootTree = etree.ElementTree(root) 
firstChild = etree.SubElement(root, 'test') 

print(etree.tostring(root, method='html')) 
### b'<document><test></test></document>' 
+0

Проще, если вы хотите, чтобы jQuery правильно разбирал пользовательские элементы. – GheloAce

0

Используйте пустую строку '', как это :

root = etree.Element('document') 
etree.SubElement(root, 'test').text = '' 
Смежные вопросы