I가 내가 사용 구문 분석 할 다음과 같은 XML 파이썬의 ElementTree
:구문 분석 XML
<rdf:RDF xml:base="http://dbpedia.org/ontology/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns="http://dbpedia.org/ontology/">
<owl:Class rdf:about="http://dbpedia.org/ontology/BasketballLeague">
<rdfs:label xml:lang="en">basketball league</rdfs:label>
<rdfs:comment xml:lang="en">
a group of sports teams that compete against each other
in Basketball
</rdfs:comment>
</owl:Class>
</rdf:RDF>
나는 모든 owl:Class
태그를 찾은 다음 모든 rdfs:label
인스턴스의 값을 추출 할 그들 안에. 다음 코드를 사용하고 있습니다 :
tree = ET.parse("filename")
root = tree.getroot()
root.findall('owl:Class')
네임 스페이스 때문에 다음 오류가 발생합니다.
SyntaxError: prefix 'owl' not found in prefix map
나는
http://effbot.org/zone/element-namespaces.htm에서 문서를 읽는 시도하지만, 난 여전히 위의 XML 여러 중첩 된 네임 스페이스를 가지고 있기 때문에이 작업을 얻을 수 없습니다입니다.
모든 owl:Class
태그를 찾기 위해 코드를 변경하는 방법을 알려주세요.
감사합니다. 특히 두 번째 부분에서는 네임 스페이스를 직접 지정할 수 있습니다. – Sudar
감사합니다. 어떻게 하드 코딩하지 않고 XML에서 네임 스페이스를 직접 얻을 수 있습니까? 아니면 어떻게 무시할 수 있습니까? 나는 findall ('{*} Class')을 시도했지만 내 경우에는 효과가 없다. – Kostanos
당신은'xmlns' 속성에 대한 트리를 직접 스캔해야합니다. 대답에서 말했듯이,'lxml'은 이것을 당신에게 해주고,'xml.etree.ElementTree' 모듈은 그렇지 않습니다. 그러나 특정 (이미 하드 코딩 된) 요소와 일치시키려는 경우 특정 네임 스페이스의 특정 요소를 일치 시키려고합니다. 이 네임 스페이스는 요소 이름보다 더 많은 문서간에 변경되지 않습니다. 요소 이름으로 하드 코딩 할 수도 있습니다. –