xml.dom篇
DOM是Document Object Model的简称,XML 文档的高级树型表示。该模型并非只针对 Python,而是一种普通XML 模型。Python 的 DOM 包是基于 SAX 构建的,并且包括在 Python 2.0 的标准 XML 支持里。
一、xml.dom的简单介绍
1、主要方法:
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]
返回Node节点的xml表示的文本:
doc = minidom.parse(filename)
doc.toxml('UTF-8')
访问元素属性:
Node.attributes["id"]
a.name #就是上面的 "id"
a.value #属性的值
2、举例说明
例1:文件名:book.xml
booktwo
(1)创建DOM对象
(2)获取根字节
root=dom1.documentElement #这里得到的是根节点
print root.nodeName,',',root.nodeValue,',',root.nodeType
返回结果为:
info , None , 1
其中:
info是指根节点的名称root.nodeName
None是指根节点的值root.nodeValue
1是指根节点的类型root.nodeType,更多节点类型如下表:
NodeType |
Named Constant |
1 |
ELEMENT_NODE |
2 |
ATTRIBUTE_NODE |
3 |
TEXT_NODE |
4 |
CDATA_SECTION_NODE |
5 |
ENTITY_REFERENCE_NODE |
6 |
ENTITY_NODE |
7 |
PROCESSING_INSTRUCTION_NODE |
8 |
COMMENT_NODE |
9 |
DOCUMENT_NODE |
10 |
DOCUMENT_TYPE_NODE |
11 |
DOCUMENT_FRAGMENT_NODE |
12 |
NOTATION_NODE |
(3) 子要素および子ノードへのアクセス
A. ルート子ノードのリストを返します
実行結果は次のとおりです:
[
B. XML ノード値を取得します (ルート ノードの下の 2 番目の子ノード イントロの値と名前を返すなど)。次の文を追加します
実行結果は次のとおりです:
イントロなし
C. 最初のノードにアクセスします
実行結果は次のとおりです:
#テキスト
D. 既知の要素名の値を取得します。イントロの後にブックメッセージを取得したい場合は、次のメソッドを使用できます。
予約メッセージ
2. XML 解析
上記の XML を解析します
方法 1 のコードは次のとおりです:
dom1=xml.dom.minidom.parse('book.xml')
root=dom1.documentElement
book={}
booknode=root。 getElementsByTagName('list')
booknode の booklist:
print '='*20
print 'id:'+booklist.getAttribute('id')
booklist.childNodes のノードリスト:
if nodelist.nodeType ==1:
print nodelist.nodeName+':',
for nodelist.childNodes:
print node.data
====================
id:001
ヘッド: bookone
名前: Python チェック
番号: 001
ページ: 200
====================
id:002
頭: booktwo
名前: Python 学習
番号: 002
ページ: 300
コード:
dom1=xml.dom.minidom.parse('book.xml')
root=dom1.documentElement
book={}
booknode=root。 getElementsByTagName('list')
ブックノードのブックリストの場合:
print '='*20
print 'id:'+booklist.getAttribute('id')
print 'head:'+booklist .getElementsByTagName('head')[0].childNodes[0].nodeValue.strip()
print 'name:'+booklist.getElementsByTagName('name')[0].childNodes[0].nodeValue.strip ()
print 'number:'+booklist.getElementsByTagName('number')[0].childNodes[0].nodeValue.strip()
print 'page:'+booklist.getElementsByTagName('page') [0].childNodes[0].nodeValue.strip()
を参照してください。
実行結果:
[{'head': u'bookone', 'page': u'200', 'number': u'001', 'id': u'001', 'name': u'Python check' }, {'head': u'booktwo', 'page': u'300', 'number': u'002', 'id': u'002', 'name': u'python learn'}]
このリストには 2 つの字典が含まれています。
三、XML ファイルを構築します
ここでは、3 つの方法で得られた結果を使用して、xml ファイルを構築します。
def create_element(doc,tag,attr):
#创建一元素节点
elementNode=doc.createElement(tag)
#创建一个文本节点
textNode=doc.createTextNode(attr)
#将文本节点として元素节点の子节点
elementNode.appendChild(textNode)
return elementNode
doc=dom1.createDocument(None,"info",None)
top_element = doc. documentElement# 得根节点
books=[{'head': u'bookone', 'page': u'200', 'number': u'001', 'id': u'001', 'name ': u'Python check'}, {'head': u'booktwo', 'page': u'300', 'number': u'002', 'id': u'002', 'name': u'python learn'}]
本の中の本:
sNode=doc.createElement('list')
sNode.setAttribute('id',str(book['id']))
headNode=create_element(doc,'head',book['head'])
nameNode=create_element(doc,'name',book['name'])
numberNode=create_element(doc,'number ',book['number'])
pageNode=create_element(doc,'page',book['page'])
sNode.appendChild(headNode)
sNode.appendChild(nameNode)
sNode.appendChild(pageNode)
top_element.appendChild(sNode)# 将遍历的节点追加根节点下
xmlfile=open('bookdate.xml','w')
doc.writexml(xmlfile ,addindent=' '*4, newl='n', encoding='utf-8')
xmlfile.close()
xml.etree.ElementTree篇
引き続き例 1 の例を使用して、xml を解析します。
1、ダウンロードXML方法1:ファイルを直接追加
复制代
复制代
book_node=root.getiterator("リスト")
方法 2 getchildren メソッドを利用して子ノードを取得します。例 1 では、次の子ノードの先頭のリストを取得します。
复制代
頭:本 2
方法3 findとfindallを使用する方法
复制代码
実行結果:
頭:bookone
名前:Python チェック
番号:001
ページ:200
findall メソッドは、指定されたすべてのノードを検索します:
実行結果:
head:bookone
name:python check
number:001
page:200
head:booktwo
name:python learn
number:002
page:300
3. book.xml の解析例
実行結果は次のとおりです:
====================
id:001
head:bookone
name:python check
number:001
page:200
====================
id:002
head:booktwo
name:python learn
number :002
ページ:300
====================
注:
リスト id='001' などの属性値を取得したい場合は、attrib メソッドを使用します。
例えば、