I have an XML file that I am trying to parse and store as objects so that I can persist them.
<key>Playlists</key> <array> <dict> <key>Name</key><string>Library</string> <key>Master</key><true/> <key>Playlist ID</key><integer>1806</integer> <key>Playlist Persistent ID</key><string>29E12A03204E0722</string> <key>Visible</key><false/> <key>All Items</key><true/> <key>Playlist Items</key> <array> <dict> <key>Track ID</key><integer>1234</integer> </dict> <dict> <key>Track ID</key><integer>1282</integer> </dict> <dict> <key>Track ID</key><integer>1694</integer> </dict> <dict> <key>Track ID</key><integer>1558</integer> </dict> </array> </dict> <dict> <key>Name</key><string>Music</string> <key>Playlist ID</key><integer>2687</integer> <key>Playlist Persistent ID</key><string>29E12A03204E072C</string> <key>Distinguished Kind</key><integer>4</integer> <key>Music</key><true/> <key>All Items</key><true/> <key>Playlist Items</key> <array> <dict> <key>Track ID</key><integer>1234</integer> </dict> <dict> <key>Track ID</key><integer>1282</integer> </dict> <dict> <key>Track ID</key><integer>1694</integer> </dict> <dict> <key>Track ID</key><integer>1558</integer> </dict> </array> </dict> I'm having trouble accessing the second array. It keeps displaying track Id's from the first array in every playlist.
My java code:
FileInputStream file = new FileInputStream(new File("itunes2.xml")); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse(file); Element root = document.getDocumentElement(); ArrayList<Double> tracks = new ArrayList<Double>(); XPath x = XPathFactory.newInstance().newXPath(); NodeList pList = (NodeList)x.evaluate("/plist/dict/array/dict", root, XPathConstants.NODESET); for (int i = 0; i < pList.getLength(); ++i) { Element dict = (Element)pList.item(i); Playlist p = new Playlist(); String name = (String)x.evaluate("key[.='Name']/following-sibling::string[1]", dict, XPathConstants.STRING); p.setName(name); Double playlistId = (Double)x.evaluate("key[.='Playlist ID']/following-sibling::integer[1]", dict, XPathConstants.NUMBER); p.setPlaylistId(playlistId); String persistentID = (String)x.evaluate("key[.='Playlist Persistent ID']/following-sibling::string[1]", dict, XPathConstants.STRING); p.setPersistentId(persistentID); NodeList tList = (NodeList)x.evaluate("/plist/dict/array/dict/array/dict", root, XPathConstants.NODESET); for (int j = 0; j < 3; ++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(play.toString()); } It's displaying the information like this:
Playlist [name=Library, persistentId=29E12A03204E0722, playlistId=1806.0, tracks=[1234.0, 1282.0, 1694.0]] Playlist [name=Music, persistentId=29E12A03204E072C, playlistId=2687.0, tracks=[1234.0, 1282.0, 1694.0, 1234.0, 1282.0, 1694.0]] Could anyone help me with this?
No comments:
Post a Comment