ElementTree의 요소 위치에서 네임스페이스 무시
ElementTree의 findall 메소드를 사용하여 네임스페이스 인식 XML 문서에서 요소를 찾으면 다음과 같이 됩니다. 각 태그에 대한 네임스페이스를 지정하는 데 필요합니다. 이는 불편을 초래할 수 있습니다. 이 문서에서는 find 및 findall과 같은 ElementTree 검색 방법에서 네임스페이스를 무시하는 방법을 제시합니다.
문제:
제공된 샘플 코드에서 볼 수 있듯이 tree.findall( "DEAL_LEVEL/PAID_OFF") 호출은 XML 파일에서 무시된 네임스페이스로 인해 None을 반환합니다. 각 태그에 {http://www.test.com}을 추가하는 것은 불편한 해결 방법입니다.
해결 방법:
XML 문서를 수정하는 대신 이를 구문 분석하고 결과의 태그를 조작합니다. 이를 통해 여러 네임스페이스 및 네임스페이스 별칭을 처리할 수 있습니다.
다음 Python 코드는 솔루션을 제공합니다.
<code class="python">from io import StringIO # for Python 2 import from StringIO instead import xml.etree.ElementTree as ET # instead of ET.fromstring(xml) it = ET.iterparse(StringIO(xml)) for _, el in it: _, _, el.tag = el.tag.rpartition('}') # strip ns root = it.root</code>
설명:
이 솔루션은 다음을 활용합니다. XML 문서를 점진적으로 처리하는 ET.iterparse 함수. 반복하는 동안 각 요소 el에는 rpartition('}')을 사용하여 네임스페이스를 제거하여 수정된 태그가 있습니다. 이렇게 하면 모든 태그에서 네임스페이스가 효과적으로 제거됩니다.
이점:
이 접근 방식을 사용하면 요소를 검색할 때 네임스페이스 접두사를 무시할 수 있으므로 프로세스가 단순화되고 네임스페이스를 수동으로 지정하세요.
위 내용은 ElementTree의 요소 위치에서 네임스페이스를 무시하는 방법: 간단한 솔루션?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!