There are a lot of reading XML articles about Python, but most of the articles are pasted with an XML file and then pasted with code to process the file. This is not conducive to beginners to learn, I hope this article can be more easily understood to teach how to use Python to read XML files.
One, what is XML?
XML expands the markup language, which can be used to mark data, define data types, and is a source language that allows users to define their own markup language.
Abc.xml
Copy Code code as follows:
<?xml version= "1.0" encoding= "Utf-8"?>
<catalog>
<maxid>4</maxid>
<login username= "pytest" passwd= ' 123456 ' >
<caption>Python</caption>
<item id= "4" >
<caption> Testing </caption>
</item>
</login>
<item id= "2" >
<caption>Zope</caption>
</item>
</catalog>
Ok, structurally, it's much like our common HTML Hypertext Markup Language. But they are designed for different purposes, Hypertext Markup Language is designed to display data, its focus is the appearance of the data. It is designed to transmit and store data, and its focus is on the content of the data.
Then it has the following characteristics:
First of all, it's got a label on the composition,<aa></aa>
Tags can have attributes: <aa id= ' 123 ' ></aa>
Tag pairs can embed data:<aa>abc</aa>
Tags can be embedded in child tags (with hierarchical relationships):
Second, obtain the label attribute
So, here's how to read this type of file in Python.
Copy Code code as follows:
#coding =utf-8
Import Xml.dom.minidom
#打开xml文档
Dom = Xml.dom.minidom.parse (' Abc.xml ')
#得到文档元素对象
root = Dom.documentelement
Print Root.nodename
Print Root.nodevalue
Print Root.nodetype
Print root. Element_node
Mxl.dom.minidom modules are used to process XML files, so they are introduced first.
Xml.dom.minidom.parse () is used to open an XML file and put this file object Dom variable.
DocumentElement is used to get the document elements of the DOM object and give the object to root
Each node has its Nodename,nodevalue,nodetype attribute.
NodeName is the name of the knot.
NodeValue is the value of a node and is valid only for text nodes.
NodeType is the type of node. Catalog is Element_node type
Here are a few of the following:
' 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 '
third, get the child label
Now you want to get the label name for catalog's child label
Copy Code code as follows:
<?xml version= "1.0" encoding= "Utf-8"?>
<catalog>
&nbs p; <maxid>4</maxid>
<login Username= "Pytest" passwd= ' 123456 ' >
< Caption>python</caption>
<item id= "4" >
<caption> testing </caption>
</item>
</login>
<item id= "2" & Gt
<caption>Zope</caption>
</item>
</catalog>
For child elements that know the name of an element, you can use the getElementsByTagName method to obtain:
Copy Code code as follows:
#coding =utf-8
Import Xml.dom.minidom
#打开xml文档
Dom = Xml.dom.minidom.parse (' Abc.xml ')
#得到文档元素对象
root = Dom.documentelement
bb = Root.getelementsbytagname (' Maxid ')
b= Bb[0]
Print B.nodename
bb = root.getelementsbytagname (' login ')
b= Bb[0]
Print B.nodename
How to differentiate labels with the same label name:
Copy Code code as follows:
<?xml version= "1.0" encoding= "Utf-8"?>
<catalog>
&nbs p; <maxid>4</maxid>
<login Username= "Pytest" passwd= ' 123456 ' >
< Caption>python</caption>
<item id= "4" >
<caption> testing </caption>
</item>
</login>
<item id= "2" & Gt
<caption>Zope</caption>
</item>
</catalog>
How to differentiate between <caption> and <item> labels more than one?
Copy Code code as follows:
#coding =utf-8
Import Xml.dom.minidom
#打开xml文档
Dom = Xml.dom.minidom.parse (' Abc.xml ')
#得到文档元素对象
root = Dom.documentelement
bb = root.getelementsbytagname (' caption ')
b= Bb[2]
Print B.nodename
bb = Root.getelementsbytagname (' item ')
b= Bb[1]
Print B.nodename
Root.getelementsbytagname (' caption ') obtains the label caption A set of labels, b[0] represents the first of a set of labels; b[2], which represents the third of the set of labels.
Four, get the label attribute value
Copy Code code as follows:
<?xml version= "1.0" encoding= "Utf-8"?>
<catalog>
&nbs p; <maxid>4</maxid>
<login Username= "Pytest" passwd= ' 123456 ' >
< Caption>python</caption>
<item id= "4" >
<caption> testing </caption>
</item>
</login>
<item id= "2" & Gt
<caption>Zope</caption>
</item>
</catalog>
<login> and <item> tags are attributes, how do they get their properties?
Copy Code code as follows:
#coding =utf-8
Import Xml.dom.minidom
#打开xml文档
Dom = Xml.dom.minidom.parse (' Abc.xml ')
#得到文档元素对象
root = Dom.documentelement
itemlist = root.getelementsbytagname (' login ')
item = itemlist[0]
Un=item.getattribute ("username")
Print UN
Pd=item.getattribute ("passwd")
Print PD
II = root.getelementsbytagname (' item ')
I1 = ii[0]
I=i1.getattribute ("id")
Print I
I2 = ii[1]
I=i2.getattribute ("id")
Print I
The GetAttribute method can get the value of the attribute of the element.
V. Obtain data between the label pairs
Copy Code code as follows:
<?xml version= "1.0" encoding= "Utf-8"?>
<catalog>
&nbs p; <maxid>4</maxid>
<login Username= "Pytest" passwd= ' 123456 ' >
< Caption>python</caption>
<item id= "4" >
<caption> testing </caption>
</item>
</login>
<item id= "2" & Gt
<caption>Zope</caption>
</item>
</catalog>
<caption> There is data between the label pairs, how to obtain this data?
There are several ways to get the data between the label pairs,
Method One:
Copy Code code as follows:
#coding =utf-8
Import Xml.dom.minidom
#打开xml文档
Dom = Xml.dom.minidom.parse (' Abc.xml ')
#得到文档元素对象
root = Dom.documentelement
Cc=dom.getelementsbytagname (' caption ')
C1=CC[0]
Print C1.firstChild.data
C2=CC[1]
Print C2.firstChild.data
C3=CC[2]
Print C3.firstChild.data
The FirstChild property returns the first child node of the selected node,. Data indicates that the node's data is obtained.
Method Two:
Copy Code code as follows:
#coding =utf-8
From Xml.etree import ElementTree as ET
Per=et.parse (' Abc.xml ')
P=per.findall ('./login/item ')
For Oneper in P:
For child in Oneper.getchildren ():
Print Child.tag, ': ', Child.text
P=per.findall ('./item ')
For Oneper in P:
For child in Oneper.getchildren ():
Print Child.tag, ': ', Child.text
Method Two is a bit complicated, and the referenced module is not the same as the previous one, FindAll is used to specify which level of tabs to begin traversing.
The GetChildren method returns all child labels in document order. and output the label name (Child.tag) and label data (Child.text)
In fact, method two is not the role of this, its core function is to traverse a certain level of the label under all the child tags.
PS: Here again for you to provide several online tools on XML operations for your reference to use:
Online Xml/json Mutual Conversion tool:
Http://tools.jb51.net/code/xmljson
Online format xml/on-line compression of XML:
Http://tools.jb51.net/code/xmlformat
XML online compression/formatting tool:
http://tools.jb51.net/code/xml_format_compress