2013-10-13 4 views
0

죄송합니다.이 문제에 관해 많은 스레드가 있지만이 질문을 보내주십시오. 그러나 그들 중 누구도 지금 내 필요를 채우고 있지 않습니다.python xml 처리 - 모든 요소를 ​​반복하는 방법?

나는 XML 파일이 있습니다.

<RestaurantList> 
<Restaurant id="100000"> 
    <Url>http://www.example.com/</Url> 
    <Name>TestRestaurant</Name> 
    <Description> 
    <Text>This restaurant has a generous selection of fine wines</Text> 
    </Description> 
</Restaurant> 
<Restaurant id="100001"> 
    <Url>http://www.example.com/</Url> 
    <Name>TestRestaurant1</Name> 
    <Description> 
    <Text>This restaurant1 has a generous selection of fine wines</Text> 
    </Description> 
</Restaurant> 
</RestaurantList> 

모든 요소를 ​​반복하고 일부를 가져 와서 db에 저장하고 싶습니다. Python에서 lxml 또는 xml과 같은 라이브러리를 보았습니다. 그리고이 시도 :

import xml.etree.ElementTree as ET 
file = ET.parse(settings.MEDIA_ROOT+'\\table.xml') 
    rests = file.xpath('//Restaurant') 
    for each in rests: 
     self.stdout.write(each) 

하지만 ElementTree has no object attribute xpath 오류가 발생하고,

이 일을하는 가장 좋은 방법은 무엇입니까

? 미리 감사드립니다.

답변

1

샘플 코드는 Restaurant 요소를 포함하는 목록을 반환하는 xpath() 메서드를 사용하여 Python 2.7.4 및 lxml 3.2.3에서 완벽하게 작동합니다. XML 파서가 XML 파일이 올바른 형식이라고 주장하면 잘못된 파일을 제공하거나 파일이 UTF-16과 같이 인식되지 않는 인코딩으로 저장됩니다.

이 문제를 디버깅하려면 open(settings.MEDIA_ROOT+'\\table.xml').read()을 인쇄하고 출력이 유효한 XML처럼 보이는지보십시오. XML의 정확성에 대해 의심이가는 경우 xmllint과 같은 독립적 인 도구를 사용하여 XML을 확인하는 것이 좋습니다.

+0

감사합니다 날 – doniyor

+0

미안, 난 다른 오류 메시지가 표시되었다 확인할 수 있습니다. 다시 한번들시겠습니까? – doniyor

+0

@doniyor 오류 메시지는 ElementTree가'xpath'를 지원하지 않는다는 것을 알려줍니다. 내가 말했듯이, 나는 lxml로 코드를 테스트했다. (보다 정확하게'import lxml.etree as ET') 완벽하게 동작했다. – user4815162342

0

나는 그렇게함으로써 그것을 가지고 :

datei = ET.parse(settings.MEDIA_ROOT+'\\table.xml') 
    rests = datei.getroot() 
    for each in rests: 
     #do something with tags 

덕분에 어쨌든 답변보기 위해 ..

관련 문제