수색…


비고

XML 입력의 모든 요소가 파싱 된 트리의 요소로 끝나는 것은 아닙니다. 현재이 모듈은 모든 XML 주석, 처리 명령 및 입력의 문서 유형 선언을 건너 뜁니다. 그럼에도 불구하고 XML 텍스트에서 구문 분석하는 대신이 모듈의 API를 사용하여 작성된 트리에는 설명 및 처리 지침이 포함될 수 있습니다. XML 출력을 생성 할 때 포함됩니다.

ElementTree를 사용하여 열기 및 읽기

ElementTree 객체를 가져 와서 관련 .xml 파일을 열고 루트 태그를 가져옵니다.

import xml.etree.ElementTree as ET
tree = ET.parse("yourXMLfile.xml")
root = tree.getroot()

트리를 통해 검색 할 수있는 몇 가지 방법이 있습니다. 첫 번째는 반복에 의한 것입니다.

for child in root:
    print(child.tag, child.attrib)

그렇지 않으면 목록과 같은 특정 위치를 참조 할 수 있습니다.

print(root[0][1].text)

특정 태그를 이름으로 검색하려면 .find 또는 .findall 사용하십시오.

print(root.findall("myTag"))
print(root[0].find("myOtherTag"))

XML 파일 수정

요소 트리 모듈 가져 오기 및 xml 파일 열기, xml 요소 가져 오기

import xml.etree.ElementTree as ET
tree = ET.parse('sample.xml')
root=tree.getroot()
element = root[0] #get first child of root element

요소 객체는 필드 변경, 속성 추가 및 수정, 자식 추가 및 제거로 조작 할 수 있습니다.

element.set('attribute_name', 'attribute_value') #set the attribute to xml element
element.text="string_text"

요소를 제거하려면 Element.remove () 메서드를 사용하십시오.

root.remove(element)

ElementTree.write () 메소드는 XML 객체를 XML 파일로 출력하는 데 사용됩니다.

tree.write('output.xml')

XML 문서 작성 및 빌드

요소 트리 가져 오기 모듈

import xml.etree.ElementTree as ET

Element () 함수는 XML 요소를 만드는 데 사용됩니다.

p=ET.Element('parent')

요소를주는 하위 요소를 만드는 데 사용되는 SubElement () 함수

c = ET.SubElement(p, 'child1')

dump () 함수는 xml 요소를 덤프하는 데 사용됩니다.

ET.dump(p)
# Output will be like this
#<parent><child1 /></parent>

ElementTree () 함수로 XML 트리를 만들고 파일에 저장하려면 write () 메소드를 사용하십시오

tree = ET.ElementTree(p)
tree.write("output.xml")

Comment () 함수는 xml 파일에 주석을 삽입하는 데 사용됩니다.

comment = ET.Comment('user comment')
p.append(comment) #this comment will be appended to parent element

iterparse (증분 파싱)를 사용하여 큰 XML 파일 열기 및 읽기

때로는 필요한 정보를 얻기 위해 전체 XML 파일을로드하지 않으려 고합니다. 이러한 경우 관련 섹션을 점진적으로로드 한 다음 완료되면 삭제할 수 있습니다. iterparse 함수를 사용하면 XML을 구문 분석하는 동안 저장된 요소 트리를 편집 할 수 있습니다.

ElementTree 객체 가져 오기 :

import xml.etree.ElementTree as ET

.xml 파일을 열고 모든 요소를 ​​반복합니다.

for event, elem in ET.iterparse("yourXMLfile.xml"):
    ... do something ...

또는 시작 / 종료 태그 또는 네임 스페이스와 같은 특정 이벤트 만 찾을 수 있습니다. 이 옵션을 생략하면 (위와 같이) "종료"이벤트 만 반환됩니다.

events=("start", "end", "start-ns", "end-ns")
for event, elem in ET.iterparse("yourXMLfile.xml", events=events):
    ... do something ...

다음은 메모리 트리에서 요소를 마치면 요소를 지우는 전체 예제입니다.

for event, elem in ET.iterparse("yourXMLfile.xml", events=("start","end")):        
    if elem.tag == "record_tag" and event == "end":
        print elem.text
        elem.clear()
    ... do something else ...

XPath로 XML 검색하기

2.7 버전부터 ElementTree 는 XPath 쿼리를 더 잘 지원합니다. XPath는 XML을 통해 탐색 할 수 있도록하는 구문으로, SQL은 데이터베이스를 검색하는 데 사용됩니다. findfindall 함수 모두 XPath를 지원합니다. 이 예제에서는 아래 xml이 사용됩니다.

 <Catalog>
    <Books>
        <Book id="1" price="7.95">
            <Title>Do Androids Dream of Electric Sheep?</Title>
            <Author>Philip K. Dick</Author>
        </Book>
        <Book id="5" price="5.95">
            <Title>The Colour of Magic</Title>
            <Author>Terry Pratchett</Author>
        </Book>
        <Book id="7" price="6.95">
            <Title>The Eye of The World</Title>
            <Author>Robert Jordan</Author>
        </Book>
    </Books>
</Catalog>

모든 책 검색 :

import xml.etree.cElementTree as ET
tree = ET.parse('sample.xml')
tree.findall('Books/Book')

제목 = 'The Magic of Color'로 책 검색 :

tree.find("Books/Book[Title='The Colour of Magic']") 
# always use '' in the right side of the comparison

id = 5 인 책 검색 :

tree.find("Books/Book[@id='5']")
# searches with xml attributes must have '@' before the name

두 번째 책 검색 :

tree.find("Books/Book[2]")
# indexes starts at 1, not 0

마지막 책 검색 :

tree.find("Books/Book[last()]")
# 'last' is the only xpath function allowed in ElementTree

모든 저자 검색 :

tree.findall(".//Author")
#searches with // must use a relative path


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow