2017-09-21 116 views
0

我已經閱讀了一些堆棧上的響應,並試圖解決這個問題一段時間。如何從Python中的elementTree使用findall從xml文檔檢索標記的數量

我希望能夠以輸出:

  • 具有相同標記的元素(比如foo,酒吧和類型)
  • 屬性內的數字(如foobar的)

樣品預計產出(或任何變化:

foo, 1 
bar, 2 
type, 8 

foobar, 10 
foobar, 20 

我試圖做到這一點不使用rootchild節點方法。

XML文檔

<first> 
    <foo> 
     <bar> 
     <type foobar="1"/> 
     <type foobar="2"/> 
     <type foobar="3"/> 
     <type foobar="4"/> 
     </bar> 
     <bar> 
     <type foobar="1"/> 
     <type foobar="2"/> 
     <type foobar="3"/> 
     <type foobar="4"/> 
     </bar> 
    </foo> 
</first> 

Python代碼

import xml.etree.ElementTree as ET 
fname = 'Library4.xml' # handle 
stuff = ET.parse(fname) 

for atype in stuff.findall('type'): 
    print(atype.get('foobar')) 

all  = stuff.findall('bar') 
print('bar', all) 

all  = stuff.findall('foo') 
print('foo', all) 

輸出我得到:

bar [] 
foo [<Element 'foo' at 0x000001E3C71F8B38>] 

快樂,以進一步澄清。感謝任何幫助,指出我的錯誤和錯誤。謝謝。

+0

你能否也把你所期望的輸出? –

+0

@ChetanVasudevan是的,我編輯並澄清了我希望得到的輸出。謝謝。 –

回答

0

因此,您可以使用類似下面的代碼並計算外觀,請按照下面的代碼作爲示例。

from xml.dom import minidom 
    fname = 'library4.xml' 
    xmldoc = minidom.parse('library4.xml') 
    print("type " + str(len(xmldoc.getElementsByTagName('type')))) 
    print("foo " + str(len(xmldoc.getElementsByTagName('foo')))) 
    print("bar " + str(len(xmldoc.getElementsByTagName('bar')))) 

和輸出,這是如下:

type 8 
    foo 1 
    bar 2 
+0

@凱恩咀嚼,這是你在找什麼? –

+0

我看到一些使用'minidom'的堆棧文章。但我試圖直接使用解析和findall來做到這一點。網上資源似乎表明這是可能的,但我弄清楚如何。 https://docs.python.org/3/library/xml.etree.elementtree.html,在20.5.3下。參考文獻 20.5.3.1。功能 –

相關問題