Pythonネットワークプログラミング学習記(8):XML生成と解析(DOM、ElementTree)
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
bookone
booktwo
(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. 既知の要素名の値を取得します。イントロの後にブックメッセージを取得したい場合は、次のメソッドを使用できます。
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 のコードは次のとおりです:
#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
コード:
#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()
を参照してください。
#@小五义 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 ファイルを構築します。
#@小五义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
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:ファイルを直接追加
复制代
方法二:指定文字串を追加する
复制代
2、获取节点 メソッド 1 を利用して getiterator メソッドを使用して指定されたポイントを取得します
book_node=root.getiterator("リスト")
方法 2 getchildren メソッドを利用して子ノードを取得します。例 1 では、次の子ノードの先頭のリストを取得します。
复制代
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 メソッドを使用します。
例えば、
ノード名を取得したい場合はタグメソッドを使用します。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック

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

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

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

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

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

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

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

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