2015-12-07 56 views
0

我想解析一個包含有關iTunes播放列表的信息的XML文件。我已成功設法解析有關播放列表名稱和ID的信息,但我無法獲取播放列表中的歌曲,因爲for循環會遍歷每個播放列表中的所有歌曲,然後將它們全部顯示出來。我希望每個播放列表都有所不同。解析XML XPath - for循環訪問所有元素而不是僅用於特定標記的元素

 NodeList tList = (NodeList) x.evaluate("/plist/dict/array/dict/array/dict", root, XPathConstants.NODESET); 
     for (int j = 0; j < tList.getLength(); ++j) { 
      Element track = (Element) tList.item(j); 

      Double trackId = (Double) x.evaluate("key[.='Track ID']/following-sibling::integer[1]", track, 
        XPathConstants.NUMBER); 
      tracks.add(trackId); 
      p.setTracks(tracks); 

     } 
     Playlist play = new Playlist(name, persistentID, playlistId, tracks); 
     System.out.println(p.toString()); 
    } 

輸出:

Playlist [name=Music, persistentId=29E12A03204E072C, playlistId=2687.0, tracks=[1234.0, 1282.0, 1694.0, 1558.0, 1802.0, 1280.0, 1278.0, 1656.0, 1298.0, 1334.0, 1294.0, 398.0, 400.0, 402.0, 404.0, 406.0, 408.0, 412.0, 414.0, 416.0, 418.0, 422.0, 424.0, 426.0, 430.0...] 
Playlist [name=Purchased, persistentId=29E12A03204E072C, playlistId=2687.0, tracks=[1234.0, 1282.0, 1694.0, 1558.0, 1802.0, 1280.0, 1278.0, 1656.0, 1298.0, 1334.0, 1294.0, 398.0, 400.0, 402.0, 404.0, 406.0, 408.0, 412.0, 414.0, 416.0, 418.0, 422.0, 424.0, 426.0, 430.0....] 

我想道ID的每首歌曲是相對於它的特定的播放列表,但是我不知道如何實現這一目標。誰能幫忙?

+0

第一個''標籤永遠不會關閉。應該在第二個播放列表顯示之前關閉它還是應該圍繞整個事物? – ParkerHalo

+0

是,在文件中關閉。該文件長30000行,所以當我發佈時,我不小心遺漏了標籤。我現在編輯它。 – ariella123

+0

如前所述,將'NodeList tList =(NodeList)x.evaluate(「/ plist/dict/array/dict/array/dict」,root,XPathConstants.NODESET);'NodeList tList =(NodeList)x。評估(「數組/字典」,字典,XPathConstants.NODESET);',以評估相對於早先選擇的'dict'元素。 –

回答

1

移動ArrayList<Double> tracks = new ArrayList<Double>();到第一環路和使用相對XPath表達式:

NodeList tList = (NodeList) x.evaluate("array/dict", dict, XPathConstants.NODESET); 
    ArrayList<Double> tracks = new ArrayList<Double>(); 
    for (int j = 0; j < tList.getLength(); ++j) { 
     Element track = (Element) tList.item(j); 
+0

這工作。非常感謝,這對我非常有幫助。 – ariella123