2013-07-03 92 views
0

此XML文檔包含一組標記events-data。我想從最近的events-data中提取信息。例如,在下面的代碼中,我想要去最後events-data標記,下去event-date標記並提取date子標記的文本。目前我在Python中使用BeautifulSoup來遍歷這個文檔。有任何想法嗎?BeautifulSoup XML Python從特定標記中提取屬性

<?xml version="1.0" encoding="UTF-8"?> 
     <first-tag> 
      <second-tag> 
      <events-data> 
       <event-date> 
        <date>20040913</date> 
       </event-date> 
      </events-data> 

      <events-data> #the one i want to traverse to grab date text 
      <event-date> 
       <date>20040913</date> 
      </event-date> 
      </events-data> 
     </second-tag> 
     </first-tag> 
+0

我在想,在'elementtree'或'minidom'在那裏你可以穿越基於索引和長度的標籤,但我想不出一個語法(或找到一個這樣的事情),這將適用於BeautifulSoup。請記住,我仍然是美麗的新手。 – sdweldon

+0

不知何故,它必須計算'events-data'發生的次數,可能是'numEvents = len(soup.find('events-data'))',然後在該索引處讀取子標記? – sdweldon

回答

1

這是使用BeautifulSoup 3

import os 
import sys 

# Import Custom libraries 
from BeautifulSoup import BeautifulStoneSoup 

xml_str = \ 
''' 
<?xml version="1.0" encoding="UTF-8"?> 
    <first-tag> 
     <second-tag> 
     <events-data> 
      <event-date> 
       <date>20040913</date> 
      </event-date> 
     </events-data> 

     <events-data> 
     <event-date> 
      <date>20040913</date> 
     </event-date> 
     </events-data> 
    </second-tag> 
    </first-tag> 
''' 
soup = BeautifulStoneSoup(xml_str) 

event_data_location = lambda x: x.name == "events-data" 

events = soup.findAll(event_data_location) 
if(events): 
    # The last event-data 
    print events[-1].text 
+0

這工作完美無瑕,謝謝!但還有一個要求,比如'event-date'中有更多的標籤,那麼如何抓住這些呢?我覺得它像'print events [-1] .text(..另一個標籤..)'的東西'' – sdweldon

+0

哦,永遠不會,我會用這個每個子標籤。感謝bud!+1快速工作! – sdweldon

相關問題