python 에서 xml.dom 모듈 을 이용 하여 xml 를 분석 하 는 방법 튜 토리 얼

9700 단어 pythonxml.domxml
1.xml 는 무엇 입 니까?어떤 특징 이 있 습 니까?
xml 는 태그 언어 를 확장 할 수 있 습 니 다.데 이 터 를 표시 하고 데이터 형식 을 정의 할 수 있 으 며 사용자 가 자신의 태그 언어 를 정의 할 수 있 는 소스 언어 입 니 다.
예:del.xml

<?xml version="1.0" encoding="utf-8"?>
<catalog>
 <maxid>4</maxid>
 <login username="pytest" passwd='123456'>
  <caption>Python</caption>
  <item id="4">
   <caption>test</caption>
  </item>
 </login>
 <item id="2">
  <caption>Zope</caption>
 </item>
</catalog>
구조 적 으로 HTML 하이퍼텍스트 표기 언어 와 비슷 하 다.그러나 그들 이 디자인 한 목적 은 다르다.하이퍼텍스트 표기 언어 는 데 이 터 를 표시 하 는 데 사용 되 고 그 초점 은 데이터 의 외관 이다.그것 은 데 이 터 를 전송 하고 저장 하 는 데 사용 되 는데 그 초점 은 데이터 의 내용 이다.
그러면 다음 과 같은 특징 이 있다.
      •그것 은 라벨 쌍 으로 구성 되 어 있다.<aa></aa>      •탭 속성 가능:<aa id='123'></aa>      •탭 에 데 이 터 를 삽입 할 수 있 습 니 다:<aa>abc</aa>      •탭 은 하위 탭 을 삽입 할 수 있 습 니 다(등급 관계 가 있 습 니 다)
2.라벨 속성 획득

#coding: utf-8
import xml.dom.minidom
dom = xml.dom.minidom.parse("del.xml") #  xml  

root = dom.documentElement    #  xml    
print "nodeName:", root.nodeName  #         nodeName,nodeValue,nodeType  
print "nodeValue:", root.nodeValue  #nodeValue     ,        
print "nodeType:", root.nodeType
print "ELEMENT_NODE:", root.ELEMENT_NODE
node Type 은 결점 의 유형 입 니 다.catalog 는 ELEMENTNODE 형식
현재 다음 과 같은 몇 가지 가 있다.

'ATTRIBUTE_NODE'

'CDATA_SECTION_NODE'

'COMMENT_NODE'

'DOCUMENT_FRAGMENT_NODE'

'DOCUMENT_NODE'

'DOCUMENT_TYPE_NODE'

'ELEMENT_NODE'

'ENTITY_NODE'

'ENTITY_REFERENCE_NODE'

'NOTATION_NODE'

'PROCESSING_INSTRUCTION_NODE'

'TEXT_NODE' 
실행 결과

nodeName: catalog

nodeValue: None

nodeType: 1

ELEMENT_NODE: 1 
3.하위 태그 획득

#coding: utf-8
import xml.dom.minidom
dom = xml.dom.minidom.parse("del.xml") 

root = dom.documentElement
bb = root.getElementsByTagName('maxid')
print type(bb)
print bb
b = bb[0]
print b.nodeName
print b.nodeValue
실행 결과

<class 'xml.dom.minicompat.NodeList'>

[<DOM Element: maxid at 0x2707a48>]

maxid

None 
4.라벨 속성 값 획득

#coding: utf-8
import xml.dom.minidom
dom = xml.dom.minidom.parse("del.xml") 

root = dom.documentElement
itemlist = root.getElementsByTagName('login')
item = itemlist[0]
print item.getAttribute("username")
print item.getAttribute("passwd")

itemlist = root.getElementsByTagName("item")
item = itemlist[0]     #   itemlist      
print item.getAttribute("id") 

item2 = itemlist[1]     #   itemlist      
print item2.getAttribute("id")
실행 결과

pytest

123456

4

2 
5.태그 쌍 간 의 데 이 터 를 얻 습 니 다.

#coding: utf-8
import xml.dom.minidom
dom = xml.dom.minidom.parse("del.xml") 

root = dom.documentElement
itemlist = root.getElementsByTagName('caption')

item = itemlist[0]
print item.firstChild.data

item2 = itemlist[1]
print item2.firstChild.data
실행 결과

Python

test 
여섯,예

<?xml version="1.0" encoding="UTF-8" ?>
<users>
 <user id="1000001">
  <username>Admin</username>
  <email>[email protected]</email>
  <age>23</age>
  <sex>boy</sex>
 </user>
 <user id="1000002">
  <username>Admin2</username>
  <email>[email protected]</email>
  <age>22</age>
  <sex>boy</sex>
 </user>
 <user id="1000003">
  <username>Admin3</username>
  <email>[email protected]</email>
  <age>27</age>
  <sex>boy</sex>
 </user>
 <user id="1000004">
  <username>Admin4</username>
  <email>[email protected]</email>
  <age>25</age>
  <sex>girl</sex>
 </user>
 <user id="1000005">
  <username>Admin5</username>
  <email>[email protected]</email>
  <age>20</age>
  <sex>boy</sex>
 </user>
 <user id="1000006">
  <username>Admin6</username>
  <email>[email protected]</email>
  <age>23</age>
  <sex>girl</sex>
 </user>
</users>
name,email,age,sex 출력
참조 코드

# -*- coding:utf-8 -*-
from xml.dom import minidom

def get_attrvalue(node, attrname):
  return node.getAttribute(attrname) if node else ''

def get_nodevalue(node, index = 0):
 return node.childNodes[index].nodeValue if node else ''

def get_xmlnode(node, name):
 return node.getElementsByTagName(name) if node else []

def get_xml_data(filename = 'user.xml'):
 doc = minidom.parse(filename) 
 root = doc.documentElement

 user_nodes = get_xmlnode(root, 'user')
 print "user_nodes:", user_nodes

 user_list=[]
 for node in user_nodes: 
  user_id = get_attrvalue(node, 'id') 
  node_name = get_xmlnode(node, 'username')
  node_email = get_xmlnode(node, 'email')
  node_age = get_xmlnode(node, 'age')
  node_sex = get_xmlnode(node, 'sex')

  user_name =get_nodevalue(node_name[0])
  user_email = get_nodevalue(node_email[0])
  user_age = int(get_nodevalue(node_age[0]))
  user_sex = get_nodevalue(node_sex[0])

  user = {}
  user['id'] , user['username'] , user['email'] , user['age'] , user['sex'] = (
   int(user_id), user_name , user_email , user_age , user_sex
  )
  user_list.append(user)
 return user_list

def test_load_xml():
 user_list = get_xml_data()
 for user in user_list :
  print '-----------------------------------------------------'
  if user:
   user_str='No.:\t%d
name:\t%s
sex:\t%s
age:\t%s
Email:\t%s' % (int(user['id']) , user['username'], user['sex'] , user['age'] , user['email']) print user_str if __name__ == "__main__": test_load_xml()
결실

C:\Users\wzh94434\Desktop\xml>python user.py

user_nodes: [<DOM Element: user at 0x2758c48>, <DOM Element: user at 0x2756288>,

 <DOM Element: user at 0x2756888>, <DOM Element: user at 0x2756e88>, <DOM Elemen

t: user at 0x275e4c8>, <DOM Element: user at 0x275eac8>]

-----------------------------------------------------

No.: 1000001

name: Admin

sex: boy

age: 23

Email: [email protected]

-----------------------------------------------------

No.: 1000002

name: Admin2

sex: boy

age: 22

Email: [email protected]

-----------------------------------------------------

No.: 1000003

name: Admin3

sex: boy

age: 27

Email: [email protected]

-----------------------------------------------------

No.: 1000004

name: Admin4

sex: gril

age: 25

Email: [email protected]

-----------------------------------------------------

No.: 1000005

name: Admin5

sex: boy

age: 20

Email: [email protected]

-----------------------------------------------------

No.: 1000006

name: Admin6

sex: gril

age: 23

Email: [email protected]  
7.총화

minidom.parse(filename)

    XML  

 

doc.documentElement

  XML    

 

node.getAttribute(AttributeName)

  XML     

 

node.getElementsByTagName(TagName)

  XML      

 

node.childNodes #       。

 

node.childNodes[index].nodeValue

  XML   

 

node.firstChild

#       。   pagexml.childNodes[0]

 

doc = minidom.parse(filename)

doc.toxml('UTF-8')

  Node   xml     

 

Node.attributes["id"]

a.name #      "id"

a.value #     

       
자,이상 이 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기