2014-03-28 2 views
8

"XML"의 tostring 메서드를 사용하여 XML 형식의 "예쁜"버전을 문자열로 사용하려고합니다.tostring의 pretty_print 옵션이 lxml에서 작동하지 않습니다.

>>> import lxml.etree as etree 
>>> root = etree.Element("root") 
>>> print(root.tag) 
root 
>>> root.append(etree.Element("child1")) 
>>> child2 = etree.SubElement(root, "child2") 
>>> child3 = etree.SubElement(root, "child3") 
>>> print(etree.tostring(root, pretty_print=True)) 
<root> 
    <child1/> 
    <child2/> 
    <child3/> 
</root> 

그러나 그 정확한 라인을 실행하는 내 출력이됩니다 :

b'<root>\n <child1/>\n <child2/>\n <child3/>\n</root>\n' 

가 I

를 설치 한 LXML의 버전에 버그가있는 lxml이 사이트에있는 예제는이 예를 보여줍니다? 튜토리얼의 단어 예제 단어가 이상하지 않은 것 같습니다.

답변

13

문자열 앞의 b 플래그가 byte string임을 보여줍니다. (파이썬 문자열에 대한 일반적인 인코딩입니다) 유니 코드 문자열로, 당신이 할 수있는 인쇄하려면 :

print(etree.tostring(root,pretty_print=True,encoding='unicode')) 
:

print(etree.tostring(root,pretty_print=True).decode()) 

또는 etree.tostring 것은 그래서 당신은 인코딩을 설정할 수있는 플래그를 가지고

어느 쪽이든 나를 위해 작동합니다. Byte StringsStrings

+1

에 대한 자세한 내용은 다음과 같습니다. 이 문서의 오류일까요? 파이썬에서 무언가가 변경되어 이전에 없었던 인코딩을 지정 했습니까? – lanteau

+1

@lanteau 솔직히 나는 모른다. 'lxml'을 많이 사용하지는 않지만'lxml' 문서의 또 다른 섹션은'method = 'text'' 플래그가 주어 졌을 때'bytes' 객체를 반환하는'etree.tostring'을 보여줍니다. 그래서 아마도 새로운 버전의'lxml'에 디폴트가 있습니까? –

+0

pip에있는 최신 릴리스 'lxml == 3.5.0'에서 수정되지 않았습니다. –

관련 문제