『壹』 python 解析xml需要什麼模塊
Python的標准庫中,提供了6種可以用於處理XML的包。
(1)xml.dom
xml.dom實現的是W3C制定的DOM API。如果你習慣於使用DOM API或者有人要求這這樣做,可以使用這個包。不過要注意,在這個包中,還提供了幾個不同的模塊,各自的性能有所區別。
DOM解析器在任何處理開始之前,必須把基於XML文件生成的樹狀數據放在內存,所以DOM解析器的內存使用量完全根據輸入資料的大小。
(2)xml.dom.minidom
xml.dom.minidom是DOM API的極簡化實現,比完整版的DOM要簡單的多,而且這個包也小的多。那些不熟悉DOM的朋友,應該考慮使用xml.etree.ElementTree模塊。據lxml的作者評價,這個模塊使用起來並不方便,效率也不高,而且還容易出現問題。
相關推薦:《Python教程》
(3)xml.dom.pulldom
與其他模塊不同,xml.dom.pulldom模塊提供的是一個「pull解析器」,其背後的基本概念指的是從XML流中pull事件,然後進行處理。雖然與SAX一樣採用事件驅動模型(event-driven processing model),但是不同的是,使用pull解析器時,使用者需要明確地從XML流中pull事件,並對這些事件遍歷處理,直到處理完成或者出現錯誤。
pull解析(pull parsing)是近來興起的一種XML處理趨勢。此前諸如SAX和DOM這些流行的XML解析框架,都是push-based,也就是說對解析工作的控制權,掌握在解析器的手中。
(4)xml.sax
xml.sax模塊實現的是SAX API,這個模塊犧牲了便捷性來換取速度和內存佔用。SAX是Simple API for XML的縮寫,它並不是由W3C官方所提出的標准。它是事件驅動的,並不需要一次性讀入整個文檔,而文檔的讀入過程也就是SAX的解析過程。所謂事件驅動,是指一種基於回調(callback)機制的程序運行方法。
(5)xml.parser.expat
xml.parser.expat提供了對C語言編寫的expat解析器的一個直接的、底層API介面。expat介面與SAX類似,也是基於事件回調機制,但是這個介面並不是標准化的,只適用於expat庫。
expat是一個面向流的解析器。您注冊的解析器回調(或handler)功能,然後開始搜索它的文檔。當解析器識別該文件的指定的位置,它會調用該部分相應的處理程序(如果您已經注冊的一個)。該文件被輸送到解析器,會被分割成多個片斷,並分段裝到內存中。因此expat可以解析那些巨大的文件。
(6)xml.etree.ElementTree(以下簡稱ET)
xml.etree.ElementTree模塊提供了一個輕量級、Pythonic的API,同時還有一個高效的C語言實現,即xml.etree.cElementTree。與DOM相比,ET的速度更快,API使用更直接、方便。與SAX相比,ET.iterparse函數同樣提供了按需解析的功能,不會一次性在內存中讀入整個文檔。ET的性能與SAX模塊大致相仿,但是它的API更加高層次,用戶使用起來更加便捷。
建議:在使用Python進行XML解析時,首選使用ET模塊,除非你有其他特別的需求,可能需要另外的模塊來滿足。
『貳』 如何用python提取XML中的注釋
from xml.etree import ElementTreestr_ = '' #文件中的xml字元串xml_obj = ElementTree.fromstring(str_)
然後通過對xml_obj進行操作,xml_obj本身也是一個xml節點。
xml_obj.getchildren() 獲取根節點的子節點列表
xml_obj.findall(node_name) 搜索xml_obj節點下名為node_name的所有節點
xml_obj.tag 節點的標簽
xml_obj.text 節點的文本信息 ,本例中可以獲得K這個文本。
xml_obj.tail 節點尾部的文本信息,本例中獲取Channel Regulator KCR1 Suppresses Heart Rhythm by Molating the Pacemaker Current I 就需要搜索到標簽為sup的節點,然後取節點的tail文本獲得。
『叄』 python這樣的xml配置文件如何讀取
xml='''<?xmlversion="1.0"encoding="utf-8"?>
<Conf>
<DBconf>
<DB>
<Desc>abc</Desc>
<ConnStr>DB_192.168.3.1</ConnStr>
<UserName>system</UserName>
<PassWd>aa</PassWd>
</DB>
<DB>
<Desc>bb</Desc>
<ConnStr>ORA9i_192.168.3.1</ConnStr>
<UserName>system</UserName>
<PassWd>system</PassWd>
</DB>
<DB>
<Desc>ddd</Desc>
<ConnStr>ORA9i_192.168.3.1</ConnStr>
<UserName>system</UserName>
<PassWd>system</PassWd>
</DB>
</DBconf>
<Otherconf>
<a>aaa</a>
<c>aaa</c>
</Otherconf>
</Conf>
'''
fromxml.domimportminidom
defget_childern(node):
returnfilter(lambdan:isinstance(n,minidom.Element),node.childNodes)
doc=minidom.parseString(xml)
root=doc.childNodes[0]
DBconf,Otherconf=get_childern(root)
forDBinget_childern(DBconf):
forninget_childern(DB):
printn.tagName,n.firstChild.data
forninget_childern(Otherconf):
printn.tagName,n.firstChild.data
『肆』 如何用Python輸出漂亮的xml文件
你的問題可以直接轉化為python如何讀取文件,使用這句代碼:open('thefile.xml').read( ) 下面是例子: >>> open('D:\\Test.xml',encoding='utf8').read()不知道為什麼,python3.4中讀取文件的默認使用GBK,這一點要注意
『伍』 python處理是Xml文件的,刪除標簽屬性符合條件的!如<data name="test"id="
你可以使用 BeautifulSoup 套件:
安裝:
pip install bs4
如果覺得 html 解析器不敷使用,參考文檔安裝其他適合的解析器。
如果想要詳細了解 BeautifulSoup 也請參考官方文檔(有中文版本)。
測試檔:
以下是我使用的測試文件:
# delete.txt
126
147
# test.xml
<re>
<id>123</id>
<name>abc</name>
</re>
<re>
<id>126</id>
<name>abc</name>
</re>
<re>
<id>135</id>
<name>abc</name>
</re>
<re>
<id>147</id>
<name>abc</name>
</re>
代碼:
from bs4 import BeautifulSoup
with open('test.xml') as reader:
xml = reader.read()
deleted_id = []
with open('delete.txt') as reader:
for line in reader:
line = line.strip()
deleted_id.append(line)
def has_delete_id(tag):
return tag.name=='re' and tag.id.string in deleted_id
soup = BeautifulSoup(xml, 'html.parser')
tags = soup(has_delete_id)
for tag in tags:
tag.decompose()
print(soup.prettify())
程式輸出:
<re>
<id>
123
</id>
<name>
abc
</name>
</re>
<re>
<id>
135
</id>
<name>
abc
</name>
</re>
代碼說明:
首先我們從 Beautiful Soup 的套件中匯入 BeautifulSoup 類
from bs4 import BeautifulSoup
接著分別從 delete.txt 和 test.xml 中讀出要刪除的 id 和主要的 xml 內容,下一步是實體化生成一個 BeautifulSoup對象 soup, 我們採用 html.parser 解析器去解析 xml:
soup = BeautifulSoup(xml, 'html.parser')
在此我們定義了一個用於過濾的 function has_delete_id,每一個在 xml 中的tag 只要是 <re> tag 且含有想要刪除的 <id> tag 就會被檢索出來:
def has_delete_id(tag):
return tag.name=='re' and tag.id.string in deleted_id
接著 soup(has_delete_id) 會幫助我們找到欲刪除的 tag,接著走訪搜索出來的這些 tag 並呼叫方法 decompose() 來從文件中刪除該標簽。
最後 soup.prettify()可以幫助我們輸出修改後的文件。
『陸』 python xml 查找關鍵字
可以這么寫:
def find(html):
soup = BeautifulSoup(html.getResponse().content,from_encoding='gb18030')
for index in soup.find_all('ROWDATA'):
print index
html是你的網頁域名
『柒』 Python 怎麼解析 xml字元串
1. 我上面這段xml代碼,一開始沒有注意看,在每一個元素的結尾元素中都含有轉義符,這就是為什麼我用xml解析插件時一直保報錯的原因,因為他不是正規的xml格式。我的方法是用正則替換掉:re.sub(r'(<)\\(/.+?>)',r'\g<1>\g<2>',f_xml) 對於Python中的正則re的sub用法
2. 處理成正規的xml格式後,我這里還是用ElementTree來解析的,但在載入時又報錯:
cElementTree.ParseError: XML or text declaration not at start of entity: line 2, column 0
這個錯誤我在網上沒有找到合適的答案,不過根據字面意思來解決,就是在開頭的地方有錯誤。這里我嘗試這吧xml的文檔聲明給去掉了,居然沒有報錯。這里有些不理解為什麼不能加? 我的方法:f_xml=test_xml.replace('<?xml version="1.0" encoding="gbk"?>','')
3. 然後再載入,就能獲取到相應的節點了。
『捌』 python-xml怎麼安裝啊
pip install lxml python2.7.9 自帶pip安裝工具。 看下面圖片,圖中顯示本人電腦已經安裝好了。
1.
直接
下載的模塊文件中已經有了模塊的文件,有些模塊只有一個文件,比如較早版本的BeautifulSoup,有些是一個文件夾,比如新版本BeautifulSoup就是一個叫做bs4的文件夾。
把這些文件直接到你的python路徑下的/Lib/site-packages文件夾中,比如C:/Python27/Lib/site-packages。之後就可以在程序里直接引用了:
import BeautifulSoup
或者
from bs4 import BeautifulSoup
這是根據你放置的文件位置不同而決定的。
網上有人說直接放在Lib文件夾中就可以了。的確這樣也行,但Lib文件夾中都是自帶的模塊,看一下就會發現我們用過的random、re等模塊的代碼文件。而外部模塊一般放在site-packages文件夾中。
2.
setup.py
很多模塊里都附帶了setup.py文件,有同學直接雙擊了,然後發現沒有用。
它的使用方法是從命令行去到setup.py所在的路徑下,運行
python setup.py install
仔細看一下安裝時輸出的信息可以發現,在線學習這個命令做的事情其實也就是幫你把模塊的代碼到site-packages文件夾。
3.
setuptools
使用setuptools可以直接根據模塊名稱來自動下載安裝,不需要自己再去尋找模塊的安裝文件。不過在使用之前,你得先安裝setuptools自身。
windows平台的32位python,可以直接下載setuptools的exe文件安裝。
『玖』 python 如何把xml文件轉化成string
你說的不是xml文件吧,是xml對象轉化成string吧。
你可以使用toxml()這個方法。
Node.toxml([encoding])
"""
.
Withnoargument,,andtheresultis
document.-8islikely
incorrect,sinceUTF-8isthedefaultencodingofXML.
Withanexplicitencoding[1]argument,theresultisabytestringinthe
specifiedencoding..To
,the
「utf-8」.
Changedinversion2.3:;seewritexml().
"""
如果解決了您的問題請採納!
如果未解決請繼續追問
『拾』 python讀取xml文件有哪些方法
引入XML組件:import xml.dom.minidom。
創建一個xml文件,<?xml version="1.0" encoding="utf-8"?>。
相關推薦:《Python教程》
載入讀取XML文件,xml.dom.minidom.parse('abc.xml'),這是xml文件的對象。
獲取XML文檔對象,root = dom.documentElement。
獲取標簽之間的數據 ,rootdata.getElementsByTagName('caption')。
總結一下xml對象,node.getAttribute(AttributeName),獲取XML節點屬性值,node.getElementsByTagName(TagName),獲取XML節點對象集合,等等具體的查看手冊。