ホームページ > バックエンド開発 > Python チュートリアル > PythonはXMLを解析します Pythonモジュールxml.domはXMLサンプルコードを解析します

PythonはXMLを解析します Pythonモジュールxml.domはXMLサンプルコードを解析します

WBOY
リリース: 2016-06-16 08:45:23
オリジナル
1220 人が閲覧しました

1. Python モジュール xml.dom は XML API を解析します

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 #属性の値
要素の属性にアクセスします

2. Python による XML ファイル解析のコード例
1. user.xml ファイルを作成し、XMl ノードを追加します

コードをコピー コードは次のとおりです:


Admin2ユーザー名& gt;



Admin3
27
Admin4
< ;/user>

& lt; 性別 & gt; lt;/性別 & gt;
& lt;/ユーザー & gt; > ユーザー ID = "1000006" & gt;
& admin6 & gt;
/ ユーザー>




2. Demo.py は user.xml ドキュメント データを解析します




コードをコピー

コードは次のとおりです:

# -*-coding:utf-8 -*-
"""
* ユーザー: lhj588
* 日付: 11-11-9
* 時刻: 13: 20
* Desc:
"""
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 ノード else ''
def get_xmlnode(node,name):
return node.getElementsByTagName(name) ifノード else []
def xml_to_string(filename='user.xml'):
doc = minidom.parse(filename)
return doc.toxml('UTF-8')
def get_xml_data( filename='user.xml'):
doc = minidom.parse(filename)
root = doc.documentElement
user_nodes = get_xmlnode(root,'user')
user_list=[]
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]).encode('utf-8','ignore')
user_email = get_nodevalue(node_email[0]).encode('utf-8','ignore')
user_age = int(get_nodevalue(node_age[0]))
user_sex = get_nodevalue(node_sex[0]).encode ('utf-8','ignore')
user = {}
user['id'] 、 user['username'] 、 user['email'] 、 user['age'] 、 user ['性別'] = (
int(user_id), user_name , user_email , user_age , user_sex
)
user_list.append(user)
return user_list
def test_xmltostring():
print xml_to_string()
def test_laod_xml():
user_list = get_xml_data()
user_list のユーザー用:
#print user['sex']
print '----- ------------------------------------------------'
if user:
user_str='编 号:%dn用户名:%sn性 别:%sn年 龄:%sn邮 箱:%sn ' % (int(user['id']) , user ['username'], user['sex'] , user['age'] , user['email'])
print user_str
print '============= ========================================'
if __name__ == "__main__ ":
test_xmltostring()
test_laod_xml()

3、测试效果
A、测试toxml
demo.py 文件中修正
if __name__ == "__main__":
test_xmltostring()

これは、Python 解析 XML python モジュール xml.dom 解析 xml サンプルの 2 番目の部分の内容です。
印刷の実行結果:

复制代码代码如下:


Admin
admin@live.cn

<性別>男


Admin2
<メール>admin2@live.cn
<年齢>22
<性別>男性
;

Admin3
admin3@live.cn
<年齢>27 < ;/年齢>
<性別>男


Admin4
admin4@live.cn
25



Admin5
admin5@live.cn
20< ;/年齢>
<性別>男


Admin6
admin6@live.cn
23


B、测试解析XML
demo.py 文件中修正
if __name__ == "__main__":
test_laod_xml()

执行打印出結果:
-------------------------------------- --------------
编 番号:1000001
用户名:Admin
性 别:男
年 龄:23
邮 箱:admin@ live.cn

======================================== ============
------------------------------------- ------------------
编 番号:1000002
用户名:Admin2
性 别:男
年 龄:22
邮箱:admin2@live.cn

===================================== ================
----------------------------- ----------------------
编 番号:1000003
用户名:Admin3
性 别:男
年 龄:27
邮 箱:admin3@live.cn

================================ ====================
---------------------- ------------------------
编 番号:1000004
用户名:Admin4
性 别:女
年 龄:25
邮 箱:admin4@live.cn

============================= ========================
---------------------- ----------------------------
编 番号:1000005
用户名:Admin5
性 别:男
年 龄:20
邮 箱:admin5@live.cn

========================= ============================
------ ----------------------------------
编 番号:1000006
用户名:Admin6
性 别:女
年 龄:23
邮 箱:admin6@live.cn

=========================================== ======

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート