2011-09-18 156 views
2
<dict> 
<key>1208</key> 
     <dict> 
      <key>Track ID</key><integer>1208</integer> 
      <key>Name</key><string>Kings And Queens</string> 
      <key>Artist</key><string>30 Seconds To Mars</string> 
      <key>Album Artist</key><string>30 Seconds to Mars</string> 
      <key>Composer</key><string>Jared Leto</string> 
      <key>Album</key><string>This Is War</string> 
      <key>Genre</key><string>Pop</string> 
      <key>Kind</key><string>MPEG audio file</string> 
      <key>Size</key><integer>10634388</integer> 
      <key>Total Time</key><integer>347820</integer> 
      <key>Track Number</key><integer>1</integer> 
      <key>Year</key><integer>2009</integer> 
      <key>Date Modified</key><date>2011-09-05T21:03:08Z</date> 
      <key>Date Added</key><date>2011-08-18T03:57:19Z</date> 
      <key>Bit Rate</key><integer>244</integer> 
      <key>Sample Rate</key><integer>44100</integer> 
      <key>Comments</key><string> 00000000 00000210 000006F0 0000000000EA0000 00000000 00A22291 00000000 00000000 00000000 00000000 00000000 00000000</string> 
      <key>Play Count</key><integer>1</integer> 

     <key>Play Date</key><integer>3399116673</integer> 
      <key>Play Date UTC</key><date>2011-09-17T09:34:33Z</date> 
      <key>Persistent ID</key><string>BB3D5E86F5CAC255</string> 
      <key>Track Type</key><string>File</string> 
      <key>Location</key><string>file://localhost/D:/My%20Music/English%20songs/01-30_seconds_to_mars-kings_and_queens.mp3</string> 
      <key>File Folder Count</key><integer>-1</integer> 
      <key>Library Folder Count</key><integer>-1</integer> 
     </dict> 

...XML解析蟒蛇

..

我想用xml.dom.minidom包來解析這個文件。

self.dom = xml.dom.minidom.parse(self.file) 
self.name = self.dom.getElementsByTagName('dict') 
print self.name[10].firstChild.data 

此代碼似乎不起作用。基本上我想要的是檢查字典的第二個孩子的價值,然後如果它是我想要軌道的位置的軌道。

有沒有辦法讓字典節點滿足我的條件?

+0

那是正確的,你有嵌套其中 '字典' 可以出現的兩個級別?那麼「getElementsByTagName」將不起作用。 –

+0

是的,有2級字典。但是在之上有plist元素可以使用plist元素嗎? – nightf0x

+0

如果您完全控制了元素的命名,我強烈建議先使用比'dict'和'key'更少的通用名稱。 :) –

回答

3

如何:

import xml.dom.minidom as minidom 
dom = minidom.parse('test.xml') 
data={} 
for dct in dom.getElementsByTagName('dict'): 
    keys=dct.getElementsByTagName('key') 
    # key.nextSibling can be an integer or string or date element, or Text node 
    # key.nextSibling.firstChild is a Text node or None 
    vals=[key.nextSibling.firstChild for key in keys] 
    # drill down to the text inside the keys and vals 
    keys=[key.firstChild.data for key in keys] 
    vals=[val.data if val else None for val in vals] 
    data=dict(zip(keys,vals)) 
    if data['Track ID']=='1208': 
     print(data['Location']) 
     break 

這將產生

file://localhost/D:/My%20Music/English%20songs/01-30_seconds_to_mars-kings_and_queens.mp3 
+0

謝謝,這將工作得很好 – nightf0x