2011-08-18 1 views
2

lxml etree를 사용하여 아래 프로토 타입의 구성 파일을 구문 분석하도록 도와주세요. 나는 tostring과 함께 이벤트, 요소에 노력했다. 불행히도 나는 텍스트가 필요 없지만 주어진 속성에 대해Python에서 Etree를 사용하여 XML 구성 파일을 구문 분석

<template name> 
    <config> 
</template> 

사이의 XML을 필요로합니다. 나는 XML과 파이썬에 초보자입니다 때문에이 시작

config_tree = etree.iterparse(token_template_file) 
for event, element in config_tree: 

    if element.attrib['name']=="ad auth": 
     print ("attrib reached. get XML before child ends") 

에서 스캔 이후 속성을 검색하는 동안

는이 코드로 시작했지만, 주요 오류, 나는에 대한 이동하는 방법을 잘 모르겠습니다 그것. 구성 파일은 다음과 같습니다.

<Templates> 

    <template name="config1"> 

    <request> 

     <password>pass</password> 

     <userName>username</userName> 

     <appID>someapp</appID> 

    </request> 

    </template> 

    <template name="config2"> 

    <request> 

     <password>pass1</password> 

     <userName>username1</userName> 

     <appID>someapp</appID> 

    </request> 

    </template> 

</Templates> 

미리 감사드립니다!

예상 출력 :

<request> 

     <password>pass1</password> 

     <userName>username1</userName> 

     <appID>someapp</appID> 

    </request> 

(I 초기 인증 서버로 사용하여이 XML httplib2를 보내)

:

는 사용자가 config2- 다음 출력이 같아야 요청 말 최종 코드 : FC 및 Constantnius 덕분에

에게 감사드립니다. 여기에 최종 코드는 다음과 같습니다

config_tree = etree.parse(token_template_file) 
    for template in config_tree.iterfind("template"): 

     if template.get("name") == "config2": 
      element = etree.tostring(template.find("request")) 

      print (template.get("name")) 
      print (element) 

출력 :

 config2 

    <request> 

     <password>pass1</password> 

      <userName>username1</userName> 

      <appID>someapp</appID> 

    </request> 
+0

예상치 못한 결과가 나옵니까? –

+0

안녕하세요 FC 님, 방금 요청 된 출력을 추가했습니다. – sunnysideup

답변

1

당신은 XML의 모든 template 요소를 반복하고 다음 코드를 구문 분석을 시도 할 수 있습니다 :

for template in root.iterfind("template"): 
    name = template.get("name") 
    request = template.find(requst) 
    password = template.findtext("request/password") 
    username = ... 
    ... 
    # Do something with the values 
+0

안녕하세요, 감사합니다. iterfind로 시도해보고 다시 받아 보겠습니다. – sunnysideup

+0

안녕하세요, 다시 감사드립니다. 나는 그것에 종사 할 수 있었다. 내 질문과 함께 대답을 게시했습니다. – sunnysideup

1

당신에게 ['name'] 대신 get('name', default='')을 사용해 볼 수 있습니다.

T o 태그에서 텍스트를 사용하십시오. .text

+0

헤이, 기본 thingy가 도움이되는지 확인하십시오, 나는 그것으로 오류를 처리 할 수 ​​있습니다. FC 감사 – sunnysideup