2016-06-22 4 views
0

여러 목록의 데이터를 XML 형식으로 저장하려고하지만 XML을 올바르게 표시하는 방법을 이해할 수 없습니다. 다음과 같이 내 코드의 예는 바로 지금입니다 :Python에서 올바르게 중첩 된 XML 출력 만들기

from lxml import etree 

#Create XML Root 
articles = etree.Element('root') 

#Create Lists & Data 
t_list = ['title1', 'title2', 'title3', 'title4', 'title5'] 
c_list = ['content1', 'content2', 'content3', 'content4', 'content5'] 
sum_list = ['summary1', 'summary2', 'summary3', 'summary4', 'summary5'] 
s_list = ['source1', 'source2', 'source3', 'source4', 'source5'] 

i = 0 
for t in t_list: 
    for i in range(len(t_list)): 
     #Create SubElements of XML Root 
     article = etree.SubElement(articles, 'Article') 
     titles = etree.SubElement(article, 'Title') 
     summary = etree.SubElement(article, 'Summary') 
     source = etree.SubElement(article, 'Source') 
     content = etree.SubElement(article, 'Content') 

     #Add List Data to SubElements 
     titles.text = t_list[i] 
     summary.text = sum_list[i] 
     source.text = s_list[i] 
     content.text = c_list[i] 

print(etree.tostring(articles, pretty_print=True)) 

내 전류 출력은 하나 개의 아주 뒤죽박죽 방식으로 기록, 한 줄에 모두 다음과 같이

b'<root>\n <Article>\n <Title>title1</Title>\n <Summary>summary1</Summary>\n <Source>source1</Source>\n <Content>content1</Content>\n </Article>\n 

그것은 pretty_print 기능처럼 보인다 lxml 내에서 적절한 들여 쓰기를 추가하고, 내가 원하는만큼 \n 나누기를 추가하지만 출력 중에 올바르게 해석되지 않는 것처럼 보입니다. 한 줄로 작성합니다.

<root> 
    <Article> 
    <Title>title1</Title> 
    <Summary>summary1</Summary> 
    <Source>source1</Source> 
    <Content>content1</Content> 
    </Article> 

적으로는, 내가 내 출력이 적절한 중첩 된 형식의 유효한 XML 문서 및 디스플레이로 볼 수에 대한 싶습니다 다음과 같이

내가 얻기 위해 노력하고있어 출력됩니다.

답변

0

귀하의 "전류 출력은"etree.tostring()에 의해 생성 된 bytestring의 표현 (내부 파이썬 표현)이며, 보인다 Python3에서 print(somebytestring) 인쇄 표현 대신 실제 문자열.

희망이 솔루션은 매우 간단합니다 : 그냥 통과 desired encodingetree.tostring()에, 예 :

xml = etree.tostring(articles, encoding="unicode", pretty_print=True) 
print(xml) 
+0

'encoding = "unicode"는 정확히 내가 원하는 것입니다. – theeastcoastwest

0

저는 파이썬에서 기본 ET 모듈만을 사용했고 파이썬 3.5 (필자가 사용하고있는)를 테스트하기 위해 lxml 다운로드를 찾을 수 없었습니다. 그러나 b 줄이 바이트를 나타 내기 전에 설명서를 한눈에 보면 tostring()에 인코딩 키워드가 있으므로 유니 코드 또는 utf-8로 설정해야합니다.

나는 for-loop (파이썬이 for-loop에 필요한 "i"를 생성) 전에 "i"를 설정할 필요가 없다고 언급 할 것이다. 그러나 나는 개인적으로 - zip 목록의 항목을 반복하고 목록 자체에서 항목을 반복합니다 (이 상황에서는 코드에 실제 영향을 미치지 않습니다).

+0

감사합니다, 나는 파이썬의 새로운 관계없이 출력에 미치는 영향, 내가 조언을 주셔서 감사 해요. – theeastcoastwest