Python ElementTree的find,findall函數參數

來源:互聯網
上載者:User

這兩天學習如何使用微軟的一個API,用python寫了介面代碼使用HTTP方法測試,HTTP的API的最後返回是一個XML檔案,翻了翻,看見python的xml的ElementTree這套介面的API看起來比較對胃口,於是使用了一下ElementTree進行解析

但死活用find,和findall兩個函數介面服務得到希望的tag,百思不得其借,

Python的docamention上面對這兩個函數,解釋非常簡單。

find( match)

Finds the first subelement matching match. match may be a tag name or path. Returns an element instance or None.

回家找了一下《Python Essential Reference》國內翻譯《Python參考手冊》,手冊的解釋太簡單,其參數match含義其實挺複雜的。

其有tag,* .//tag,tag1/tag2,*/tag等不同的用法,文檔上根本沒有說明白。不知道是不是因為ElementTree 是一個外家的孩子,在本家不受待見還是因為是effbot自己提交的文檔,文檔寫的馬虎了。

有興趣的去 http://effbot.org/zone/element.htm 翻翻,比docamention 上面講的清楚明白一些。

廢話不多說,用代碼解釋這兩個函數。

 

xml_str="""
<a>
    <b>1</b>
    <b>2</b>
    <c>
        <d>
            <b>3</b>
            <b>4</b>
        </d>
        <e>
            <b>5</b>
            <b>6</b>
        </e>
    </c>
</a>
"""
tag = xml.etree.ElementTree.fromstring(xml_str)
print "find a-----------------------------------------------------"
find_tag = tag.findall("a")  #自己是搜尋不到
print find_tag
print
find_tag = tag.findall("*")  #找打text為1,2的b和C
print find_tag
    
print "find b-----------------------------------------------------"    
find_tag = tag.findall("b")     #找到 text 為 1,2的b
print find_tag
for item in find_tag:
    print item,item.text 
print 
find_tag = tag.findall(".//b")  #找到  text 為 1,2,3,4,5,6 的b
print find_tag
for item in find_tag:
    print item,item.text 
  
print "find d-----------------------------------------------------"     
find_tag = tag.findall("d")    #不是A的子節點,這樣搜尋不到。
print find_tag
print
find_tag = tag.findall("c/d")  #到達d的路徑,path不包括當前節點
print find_tag
print
find_tag = tag.findall(".//d") #使用.//首碼,從當前節點尋找所有的下方節點
print find_tag
print
print "find path . *-----------------------------------------------------"
tag_c = tag.find(".//c")         #從C開始找
find_tag = tag_c.findall(".//b") ##找C下面所有層次找b,找到  text 為 3,4,5,6 的b
print find_tag
for item in find_tag:
    print item,item.text 
find_tag = tag_c.findall("*/b") #找到C,D下面一層所有tag為b的資料 ,也是找到  text 為 3,4,5,6 的b
print find_tag
for item in find_tag:
    print item,item.text 
print "xml namespace -----------------------------------------------------"
xml_str="""<a xmlns="http://www.w3.org/TR/html4" >
    <b>1</b>
</a>
"""
tag = xml.etree.ElementTree.fromstring(xml_str)
find_tag = tag.findall("*")  #如果有xml命名空間,那麼所有所有的tag都有名字空間的uri,如上這個tag字串是 {http://www.w3.org/TR/html4}b 而不是b
print find_tag
倒黴的是,這幾個暗礁怎麼都讓我碰上了。
 
【可以在標明作者和出處的情況下的完整轉載,不得用於盈利和商業用途,否則每字1元,每圖100,不降價,對百度文庫,360doc加價一倍】
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.