Python Language
XML 조작
수색…
비고
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은 데이터베이스를 검색하는 데 사용됩니다. find
와 findall
함수 모두 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