2012-03-09 2 views
2

KML 파일 내에서 일치하지 않는) (찾을 수 :파이썬 ElementTree 나는 다음과 같은 요소 트리를 사용하여 KML 파일에서 요소를 찾기 위해 노력하고있어

<?xml version="1.0" encoding="UTF-8"?> 
<kml xmlns="http://www.opengis.net/kml/2.2"> 
    <Document> 
    <name>Location history from 03/03/2012 to 03/10/2012</name> 
    </Document> 
</kml> 

"name"요소가 존재합니다. 왜 검색 결과가 비어있게 되나요?

+0

좋은 대답 (+1), 당신은 또한 xpath를'// * [name() = 'name']'으로 바꿀 수 있습니다. –

+0

@DevNull ... 제쳐두고 - ElementTree의'find()'는 * 꽤 * XPath가 아닙니다; XPath에 영감을받은 언어로 생각하면됩니다. 따라서 문자열이 완전히 유효한 XPath이고 다른 도구와 함께 사용하는 편리한 방법 인 반면 xml.etree.ElementTree가 구현하는 하위 집합에서 작동하는 것처럼 보이지 않습니다 (lxml.etree와 달리 libxml2의 XPath 1.0을 사용함). 이행). –

+0

@CharlesDuffy - 감사합니다. –

답변

5

일치하려는 요소는 실제로 KML 네임 스페이스 내에 있지만 네임 스페이스를 염두에두고 검색하지 않는 것입니다.

시도 :

p = tree.find(".//{http://www.opengis.net/kml/2.2}name") 

대신 표준 라이브러리 ElementTree의 LXML의 XPath를 사용한 경우, 당신은 대신 사전으로의 네임 스페이스를 전달할 것 : @CharlesDuffy 외에도

>>> tree = lxml.etree.fromstring('''<kml xmlns="http://www.opengis.net/kml/2.2"> 
... <Document> 
...  <name>Location history from 03/03/2012 to 03/10/2012</name> 
... </Document> 
... </kml>''') 
>>> tree.xpath('//kml:name', namespaces={'kml': "http://www.opengis.net/kml/2.2"}) 
[<Element {http://www.opengis.net/kml/2.2}name at 0x23afe60>] 
관련 문제