2017-03-24 2 views
0

아래 XML 파일을 구문 분석하는 데 문제가 있습니다. 여기 내가 시도한 것이있다.복잡한 xml 구조를 파싱하기 위해 요소 트리를 적용합니다.

"type:plagiarism;plagiarism_reference:00061; 
     offset:47727;length:182;source:P4P;wd_count:37" 

All art is imitation of nature.

난 정말 당신의 제안에 감사합니다 :

내 원하는 출력

<?xml version="1.0" encoding="UTF-8" standalone="no" ?> 
<corpus name="P4P" version="1.0" lng="en" xmlns="http://clic.ub.edu/mbertran/formats/paraphrase-corpus" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://clic.ub.edu/mbertran/ 
formats/paraphrase-corpus http://clic.ub.edu/mbertran/formats/paraphrase-corpus.xsd"> 
    <snippets> 
     <snippet id="16488" source_description="type:plagiarism;plagiarism_reference:00061; 
     offset:47727;length:182;source:P4P;wd_count:37"> 
     All art is imitation of nature. 
     </snippet> 

    </snippets> 
</corpus> 

import xml.etree.ElementTree 
#root=xml.etree.ElementTree.parse("C:\\Users\\P4P_corpus\\P4P_corpus_v1.xml").getroot() 
source=root.findall('snippets/snippet') 
for details in source.findall: 
    print details.get('source_description') 
    print details.findtext 

내 출력은 비어 이온.

+0

게시 된 코드의 출력이 비어 있다고 생각지 않습니다. 'snippets \ snipet'는 최소한 오류를 발생 시켰을 것입니다. –

+0

@MadPhysicist, 죄송합니다. 슬래시를 잘못 입력 했으므로 지금 질문을 수정하겠습니다. 그러나 그 결과는 내가 가진 것입니다. – Boby

답변

0

요소 앞에 xml 네임 스페이스를 추가해야합니다. 당신이 구문 분석 한 후 뿌리를 인쇄 할 경우 당신은

<Element '{http://clic.ub.edu/mbertran/formats/paraphrase-corpus}corpus' at 0x7ff7891f6390> 
      ^  this part here is the full name      ^

그래서 '조각'을 통해 당신이 먼저 처리에 대해

for snippets in root.findall('{http://clic.ub.edu/mbertran/formats/paraphrase-corpus}snippets'): 
    for s in snippets.findall('{http://clic.ub.edu/mbertran/formats/paraphrase-corpus}snippet'): 
     print s.get('source_description') 

'미리보기'요소와 '스 니펫'요소를 읽을 수 있습니다 찾을 요소를 반복하는거야 네임 스페이스 @https://docs.python.org/2/library/xml.etree.elementtree.html#parsing-xml-with-namespaces

+0

좋은 해결책, 그것은 효과가 있었다. 많은 감사합니다. – Boby