2012-11-14 20 views
0

解析子元素我有一些代碼在一個XML文件,我用解析et.parse:與ElementTree的

<VIAFCluster xmlns="http://viaf.org/viaf/terms#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:void="http://rdfs.org/ns/void#" xmlns:foaf="http://xmlns.com/foaf/0.1/"> 
<viafID>15</viafID> 
<nameType>Personal</nameType> 
</VIAFCluster> 
<mainHeadings> 
    <data> 
     <text> 
      Gondrin de Pardaillan de Montespan, Louis-Antoine de, 1665-1736 
     </text> 
    </data> 
</mainHeadings> 

,我想它解析爲:

[15, 「個人」,「貢德蘭等。「]

我似乎無法與打印任何的字符串信息:

import xml.etree.ElementTree as ET 

tree = ET.parse('/Users/user/Documents/work/oneline.xml') 
root = tree.getroot() 

for node in tree.iter(): 
    name = node.find('nameType') 
    print(name) 

,因爲它顯示爲‘無’...什麼是我做錯了嗎?

+0

嘗試打印節點,它包含所有的根元素(nameType以及)。當你遍歷根元素時,其中一個節點將是nameType元素,並且它找到None,因爲你實際上試圖在nameType元素中查找nameType元素,而您已經在節點變量中找到了它。 – andrean

回答

1

我還不確定你想要做什麼,但希望如果你運行下面的代碼,它會幫助你的方式。使用getiterator函數通過元素可以看到發生了什麼。你可以拿起你想要的東西,當你來到他們的:

import xml.etree.ElementTree as et 
xml = ''' 
<VIAFCluster xmlns="http://viaf.org/viaf/terms#" 
      xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
      xmlns:void="http://rdfs.org/ns/void#" 
      xmlns:foaf="http://xmlns.com/foaf/0.1/"> 
    <viafID>15</viafID> 
    <nameType>Personal</nameType> 
    <mainHeadings> 
     <data> 
      <text> 
       Gondrin de Pardaillan de Montespan, Louis-Antoine de, 1665-1736 
      </text> 
     </data> 
    </mainHeadings> 
</VIAFCluster> 
''' 
tree = et.fromstring(xml) 
lst = [] 
for i in tree.getiterator(): 
    t = i.text.strip() 
    if t: 
     lst.append(t) 
     print i.tag 
     print t 

你會最終列出你想要的。我必須清理你的xml,因爲你有不止一個頂層元素,這是一個禁忌。也許這一直是你的問題。

祝你好運,邁克