"findall"메소드를 사용하여 ElementTree 모듈에서 소스 xml 파일의 일부 요소를 찾고 싶습니다.
그러나 소스 xml 파일 (test.xml)에는 네임 스페이스가 있습니다. XML 파일의 일부를 샘플로 자릅니다.
<?xml version="1.0" encoding="iso-8859-1"?>
<XML_HEADER xmlns="http://www.test.com">
<TYPE>Updates</TYPE>
<DATE>9/26/2012 10:30:34 AM</DATE>
<COPYRIGHT_NOTICE>All Rights Reserved.</COPYRIGHT_NOTICE>
<LICENSE>newlicense.htm</LICENSE>
<DEAL_LEVEL>
<PAID_OFF>N</PAID_OFF>
</DEAL_LEVEL>
</XML_HEADER>
샘플 파이썬 코드는 다음과 같습니다.
from xml.etree import ElementTree as ET
tree = ET.parse(r"test.xml")
el1 = tree.findall("DEAL_LEVEL/PAID_OFF") # Return None
el2 = tree.findall("{http://www.test.com}DEAL_LEVEL/{http://www.test.com}PAID_OFF") # Return <Element '{http://www.test.com}DEAL_LEVEL/PAID_OFF' at 0xb78b90>
네임 스페이스 "{http://www.test.com}"이 있기 때문에 작동 할 수 있지만 각 태그 앞에 네임 스페이스를 추가하는 것은 매우 불편합니다.
"find", "findall"등의 메소드를 사용할 때 네임 스페이스를 무시하려면 어떻게해야합니까?
tree.findall("{0}DEAL_LEVEL/{0}PAID_OFF".format('{http://www.test.com}'))
tree.findall("xmlns:DEAL_LEVEL/xmlns:PAID_OFF", namespaces={'xmlns': 'http://www.test.com'})
편리 충분?