2012-10-12 2 views
3

나는 많은 텍스트가 포함 된 많은 xml 파일을 가지고 있습니다. 이 텍스트는 소문자를 구두점을 제거해야합니다. 하지만 파이썬을 사용하여 모든 태그를 무시하고 싶다고 말하는 법을 모릅니다. 파이썬을 사용하여 많은 XML 파일에서 태그를 무시하는 방법

나는 ElementTree라는 XML 파서를 발견하고 나는 태그를 찾을 수있는 정규 표현식이 있습니다 pattern = re.compile ('<[^<]*?>')

내가 그것을 테스트를하고 나에게 첫 번째 태그 (이름이 많은 태그가)에서 텍스트 만 제공합니다. 왜?

text = "<root> <test>aaaaaaa </test> <test2> bbbbbbbbb </test2> </root> <root> <test3> cccccc </test3> <test4> ddddd </test4> </root>" 
pattern = re.compile ('<[^<]*?>') 
tmp = pattern.findall(content, re.DOTALL) 

을 그리고 그것은 나에게 제공합니다 :

는 그래서 다른 테스트가 모든 태그를 얻을 수 있도록 문자열 테스트

['</test>', '<test2>', '</test2>', '</root>', '<root>', '<test3>', '</test3>', '<test4>', '</test4>', '</root>'] 

왜 안 <root> <test>도?

+0

귀하의 XML가 표시되지 않습니다 유효하다. 두 번 있습니다. 열 0 라인 173 : –

+0

내 지점 내 xml 파일에 많은 태그가 있음을 보여주고 있었고, 난 만이 오류와 함께 첫 번째까지 텍스트 얻을 : 문서 요소 후 정크 : xml.parsers.expat.ExpatError를 라인 173은 두 번째 파일 인 이 시작되는 xml 파일에 있습니다. – user1262403

+0

XML 파일에 특수 문자 또는 특정 인코딩이 있기 때문에이 오류가 발생할 수 있습니다. –

답변

6

실제로 ElementTree를 사용하지 않는 것 같습니다.

Here

는 ElementTree를 사용하는 방법의 예입니다

import xml.etree.ElementTree as ET 
tree = ET.parse('country_data.xml') 
root = tree.getroot() 

당신이 그들을 청소하는 기능을 통해 모든 태그를 실행하는 재귀를 사용할 수 있습니다

def clean_tag(tag): 
    for child in tag: 
     clean_tag(child) 
    if tag.text != None: 
     # add your code to do lowercase and punctuation here 
     tag.text = tag.text.lower() 

clean_tag(tree.getroot()) 
clean_xml = ET.tostring(tree) 
+0

답장을 보내 주셔서 감사합니다. 당신이 "그 (것)들을 청소하기 위하여"말할 때 당신은 그 (것)들을 제거한 ㄴ다는 것을 의미 하는가? 내가 그들을 제거하고 싶지 않기 때문에. 난 그냥 그들을 무시하고 텍스트 소문자 + rmv punct 않습니다. 나중에 다른 프로세스를 수행 할 수 있도록 태그가 필요합니다. – user1262403

+0

"clean"은 텍스트를 소문자로 변환하고 구두점을 제거하는 것을 의미합니다. –

관련 문제