>백엔드 개발 >파이썬 튜토리얼 >ElementTree의 요소 위치에서 네임스페이스를 무시하는 방법: 간단한 솔루션?

ElementTree의 요소 위치에서 네임스페이스를 무시하는 방법: 간단한 솔루션?

Linda Hamilton
Linda Hamilton원래의
2024-10-28 05:10:021030검색

How to Ignore Namespaces in ElementTree's Element Location: A Simple Solution?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.