ホームページ バックエンド開発 Python チュートリアル Pythonネットワークプログラミング学習記(8):XML生成と解析(DOM、ElementTree)

Pythonネットワークプログラミング学習記(8):XML生成と解析(DOM、ElementTree)

Jun 16, 2016 am 08:43 AM
python xml 解析する

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

复制代码 代码如下:



   Book message
   
        bookone
        python check
        001
        200
   

   
        booktwo
        python learn
        002
        300
   


(1)创建DOM对象

复制代码 代码如下:

import xml.dom.minidom
dom1=xml.dom.minidom.parse('book.xml')

(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. ルート子ノードのリストを返します

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

import xml.dom.minidom
dom1=xml.dom。 minidom.parse ('book.xml')
root=dom1.documentElement
#print root.nodeName,',',root.nodeValue,',',root.nodeType
print root.childNodes

実行結果は次のとおりです:

[ ;, , , ]

B. XML ノード値を取得します (ルート ノードの下の 2 番目の子ノード イントロの値と名前を返すなど)。次の文を追加します

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

print root.childNodes[1].nodeName,root.childNodes[1] ].nodeValue

実行結果は次のとおりです:

イントロなし

C. 最初のノードにアクセスします

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

print root.firstChild.nodeName

実行結果は次のとおりです:

#テキスト

D. 既知の要素名の値を取得します。イントロの後にブックメッセージを取得したい場合は、次のメソッドを使用できます。

コードをコピー コードは次のとおりです:
import xml.dom.minidom
dom1=xml.dom。 minidom.parse ('book.xml')
root=dom1.documentElement
#print root.nodeName,',',root.nodeValue,',',root.nodeType
node= root.getElementsByTagName ('intro ')[0]
node.childNodes のノード:
if node.nodeType in (node.TEXT_NODE,node.CDATA_SECTION_NODE):
print node.data

この方法の欠点は、型を判断する必要があり、あまり使いにくいことです。実行結果は次のとおりです:

予約メッセージ

2. XML 解析

上記の XML を解析します

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

コードをコピーします コードは次のとおりです:
#@小五义http://www.cnblogs.com/ xiaowuyi
#xml 解析
import xml.dom.minidom

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

方法 2:

コード:

コードをコピーします コードは次のとおりです:
#@小五义http://www.cnblogs.com/ xiaowuyi
#xml 解析
import xml.dom.minidom

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()

実行結果は方法 1 と同じです。上記の 2 つの方法を比較すると、方法 1 は XML ツリー構造に基づいて複数のループを実行するため、各ノードを直接操作する方法ほど読みやすくはありません。より多くのメソッド プログラムを呼び出すには、リストとストレージ用の辞書を使用できます。詳細については、メソッド 3:

を参照してください。

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

#@小五义 http://www.cnblogs.com/xiaowuyi
#xml 解析
import xml.dom.minidom
dom1=xml.dom.minidom.parse( 'book.xml')
root=dom1.documentElement
book=[]
booknode=root.getElementsByTagName('list')
ブックノード内のブックリストの場合:
bookdict={}
bookdict['id']=booklist.getAttribute('id')
bookdict['head']=booklist.getElementsByTagName('head')[0].childNodes[0].nodeValue.strip()
bookdict['name']=booklist.getElementsByTagName('name')[0].childNodes[0].nodeValue.strip()
bookdict['number']=booklist.getElementsByTagName('number')[ 0].childNodes[0].nodeValue.strip()
bookdict['page']=booklist.getElementsByTagName('page')[0].childNodes[0].nodeValue.strip()
本。 append(bookdict)
印刷ブック

実行結果:

[{'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 ファイルを構築します。

复制代 代码如下:
# -*-coding: cp936 -*-
#@小五义http://www.cnblogs.com/xiaowuyi
#xml 创建
import xml.dom

def create_element(doc,tag,attr):
#创建一元素节点
elementNode=doc.createElement(tag)
#创建一个文本节点
textNode=doc.createTextNode(attr)
#将文本节点として元素节点の子节点
elementNode.appendChild(textNode)
return elementNode

dom1=xml.dom.getDOMImplementation()# 文書作成オブジェクト、文書オブジェクトはさまざまなポイントの作成に使用されます。

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()

の実行後、book.xml と同様に bookdate.xml ファイルが生成されます。

xml.etree.ElementTree篇

引き続き例 1 の例を使用して、xml を解析します。

1、ダウンロードXML

方法1:ファイルを直接追加

复制代

代码如下:import xml.etree.ElementTreeroot=xml.etree.ElementTree.parse ('book.xml')



方法二:指定文字串を追加する

复制代

代码如下:import xml.etree.ElementTreeroot = xml.etree.ElementTree.fromstring (xmltext)ここでの xmltext は指定された文字列です。



2、获取节点 メソッド 1 を利用して getiterator メソッドを使用して指定されたポイントを取得します

book_node=root.getiterator("リスト")

方法 2 getchildren メソッドを利用して子ノードを取得します。例 1 では、次の子ノードの先頭のリストを取得します。

复制代

代码如下:#@小五义 http://www.cnblogs.com/xiaowuyiimport xml。 etree.ElementTreeroot=xml.etree.ElementTree.parse('book.xml')
book_node=root.getiterator("list")
book_node のノード:
book_node_child=node。 getchildren()[0]
print book_node_child.tag+':'+book_node_child.text



実行結果: 頭:本 1

頭:本 2

方法3 findとfindallを使用する方法

指定された最初の項目に到達する方法を見つける:

复制代码

代码如下:

# -*-coding: cp936 -*-
#@小五义
import xml.etree.ElementTree
root=xml.etree.ElementTree.parse('book.xml ')
book_find=root.find('list')
book_find のノート用:
print note.tag+':'+note.text

実行結果:

頭:bookone
名前:Python チェック
番号:001
ページ:200

findall メソッドは、指定されたすべてのノードを検索します:

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

# -*-coding: cp936 -*-
#@小五义
import xml.etree.ElementTree
root=xml.etree.ElementTree.parse('book.xml')
book=root.findall('list')
for book_list in book:
book_list のノート:
print note.tag+':'+note.text

実行結果:

head:bookone
name:python check
number:001
page:200
head:booktwo
name:python learn
number:002
page:300

3. book.xml の解析例

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

# -*-coding: cp936 -*-
#@小五义
import xml.etree.ElementTree
root=xml.etree.ElementTree.parse('book.xml')
book=root.findall('list')
for book_list in book:
print '='*20
if book_list.attrib.has_key('id'):
print "id:"+book_list.attrib['id']
(book_list のメモ用) :
print note.tag+':'+note.text
print '='*20

実行結果は次のとおりです:

====================
id:001
head:bookone
name:python check
number:001
page:200
====================
id:002
head:booktwo
name:python learn
number :002
ページ:300
====================

注:
リスト id='001' などの属性値を取得したい場合は、attrib メソッドを使用します。
例えば、bookone の bookone でノードの値を取得したい場合は text メソッドを使用します。
ノード名を取得したい場合はタグメソッドを使用します。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

携帯電話でXMLをPDFに変換するとき、変換速度は高速ですか? 携帯電話でXMLをPDFに変換するとき、変換速度は高速ですか? Apr 02, 2025 pm 10:09 PM

Mobile XMLからPDFへの速度は、次の要因に依存します。XML構造の複雑さです。モバイルハードウェア構成変換方法(ライブラリ、アルゴリズム)コードの品質最適化方法(効率的なライブラリ、アルゴリズムの最適化、キャッシュデータ、およびマルチスレッドの利用)。全体として、絶対的な答えはなく、特定の状況に従って最適化する必要があります。

携帯電話のXMLファイルをPDFに変換する方法は? 携帯電話のXMLファイルをPDFに変換する方法は? Apr 02, 2025 pm 10:12 PM

単一のアプリケーションで携帯電話でXMLからPDF変換を直接完了することは不可能です。クラウドサービスを使用する必要があります。クラウドサービスは、2つのステップで達成できます。1。XMLをクラウド内のPDFに変換し、2。携帯電話の変換されたPDFファイルにアクセスまたはダウンロードします。

C言語合計の機能は何ですか? C言語合計の機能は何ですか? Apr 03, 2025 pm 02:21 PM

C言語に組み込みの合計機能はないため、自分で書く必要があります。合計は、配列を通過して要素を蓄積することで達成できます。ループバージョン:合計は、ループとアレイの長さを使用して計算されます。ポインターバージョン:ポインターを使用してアレイ要素を指し示し、効率的な合計が自己概要ポインターを通じて達成されます。アレイバージョンを動的に割り当てます:[アレイ]を動的に割り当ててメモリを自分で管理し、メモリの漏れを防ぐために割り当てられたメモリが解放されます。

XMLをPDFに変換できるモバイルアプリはありますか? XMLをPDFに変換できるモバイルアプリはありますか? Apr 02, 2025 pm 09:45 PM

XML構造が柔軟で多様であるため、すべてのXMLファイルをPDFSに変換できるアプリはありません。 XMLのPDFへのコアは、データ構造をページレイアウトに変換することです。これには、XMLの解析とPDFの生成が必要です。一般的な方法には、ElementTreeなどのPythonライブラリを使用してXMLを解析し、ReportLabライブラリを使用してPDFを生成することが含まれます。複雑なXMLの場合、XSLT変換構造を使用する必要がある場合があります。パフォーマンスを最適化するときは、マルチスレッドまたはマルチプロセスの使用を検討し、適切なライブラリを選択します。

推奨されるXMLフォーマットツール 推奨されるXMLフォーマットツール Apr 02, 2025 pm 09:03 PM

XMLフォーマットツールは、読みやすさと理解を向上させるために、ルールに従ってコードを入力できます。ツールを選択するときは、カスタマイズ機能、特別な状況の処理、パフォーマンス、使いやすさに注意してください。一般的に使用されるツールタイプには、オンラインツール、IDEプラグイン、コマンドラインツールが含まれます。

携帯電話でXMLをPDFに変換する方法は? 携帯電話でXMLをPDFに変換する方法は? Apr 02, 2025 pm 10:18 PM

携帯電話でXMLをPDFに直接変換するのは簡単ではありませんが、クラウドサービスの助けを借りて実現できます。軽量モバイルアプリを使用してXMLファイルをアップロードし、生成されたPDFを受信し、クラウドAPIで変換することをお勧めします。クラウドAPIはサーバーレスコンピューティングサービスを使用し、適切なプラットフォームを選択することが重要です。 XMLの解析とPDF生成を処理する際には、複雑さ、エラー処理、セキュリティ、および最適化戦略を考慮する必要があります。プロセス全体では、フロントエンドアプリとバックエンドAPIが連携する必要があり、さまざまなテクノロジーをある程度理解する必要があります。

XMLをPDFに変換できるモバイルアプリはありますか? XMLをPDFに変換できるモバイルアプリはありますか? Apr 02, 2025 pm 08:54 PM

XMLをPDFに直接変換するアプリケーションは、2つの根本的に異なる形式であるため、見つかりません。 XMLはデータの保存に使用され、PDFはドキュメントを表示するために使用されます。変換を完了するには、PythonやReportLabなどのプログラミング言語とライブラリを使用して、XMLデータを解析してPDFドキュメントを生成できます。

XML形式を開く方法 XML形式を開く方法 Apr 02, 2025 pm 09:00 PM

ほとんどのテキストエディターを使用して、XMLファイルを開きます。より直感的なツリーディスプレイが必要な場合は、酸素XMLエディターやXMLSPYなどのXMLエディターを使用できます。プログラムでXMLデータを処理する場合、プログラミング言語(Pythonなど)やXMLライブラリ(XML.ETREE.ELEMENTTREEなど)を使用して解析する必要があります。

See all articles