【发布时间】:2016-03-10 11:00:45
【问题描述】:
我有一个包含许多 <dict> 元素的 xml 文件,我想尝试获取第三个元素中的元素。我的问题是,当我调用 doc.getElementsByTagName("dict") 时,它会获取每个称为 dict 的元素。
代码如下:
try {
File inputFile = new File("itunes2.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(inputFile);
doc.getDocumentElement().normalize();
System.out.println("Root element :"
+ doc.getDocumentElement().getNodeName());
NodeList nList = doc.getElementsByTagName("dict");
System.out.println("----------------------------");
for (int temp = 0; temp < nList.getLength(); temp++) {
Node nNode = nList.item(temp);
System.out.println("\nCurrent Element :" + nNode.getNodeName());
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
System.out.println("Major Version : "
+ eElement.getElementsByTagName("integer").item(0)
.getTextContent());
System.out.println("Minor Version : "
+ eElement.getElementsByTagName("integer").item(0)
.getTextContent());
System.out.println("Application version : "
+ eElement.getElementsByTagName("string").item(0)
.getTextContent());
System.out.println("Features : "
+ eElement.getElementsByTagName("integer").item(2)
.getTextContent());
System.out.println("Music Folder : "
+ eElement.getElementsByTagName("string").item(1)
.getTextContent());
System.out.println("Library Persistent ID : "
+ eElement.getElementsByTagName("string").item(2)
.getTextContent());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
XML:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Major Version</key><integer>1</integer>
<key>Minor Version</key><integer>1</integer>
<key>Application Version</key><string>10.1</string>
<key>Features</key><integer>5</integer>
<key>Show Content Ratings</key><true/>
<key>Music Folder</key><string>file://localhost//Thomts/Holly/data/My%20Music/iTunes/iTunes%20Music/</string>
<key>Library Persistent ID</key><string>29E12A03204E0721</string>
<key>Tracks</key>
<dict>
<key>324</key>
<dict>
<key>Track ID</key><integer>324</integer>
<key>Name</key><string>Talk Dirty To Me</string>
<key>Artist</key><string>Poison</string>
<key>Composer</key><string>Poison</string>
<key>Album</key><string>The Best Of Poison: 20 Years Of Rock</string>
<key>Genre</key><string>Metal</string>
<key>Kind</key><string>AAC audio file</string>
<key>Size</key><integer>3698203</integer>
<key>Total Time</key><integer>224866</integer>
<key>Disc Number</key><integer>1</integer>
<key>Disc Count</key><integer>1</integer>
<key>Track Number</key><integer>1</integer>
<key>Track Count</key><integer>18</integer>
<key>Year</key><integer>1986</integer>
<key>Date Modified</key><date>2008-08-07T15:16:57Z</date>
<key>Date Added</key><date>2008-08-07T15:17:17Z</date>
<key>Bit Rate</key><integer>128</integer>
<key>Sample Rate</key><integer>44100</integer>
<key>Play Count</key><integer>6</integer>
<key>Play Date</key><integer>3378486192</integer>
<key>Play Date UTC</key><date>2011-01-22T03:23:12Z</date>
<key>Compilation</key><true/>
<key>Sort Album</key><string>Best Of Poison: 20 Years Of Rock</string>
<key>Persistent ID</key><string>29E12A03204E0873</string>
<key>Track Type</key><string>File</string>
<key>Location</key><string>file://localhost//Thomts/Holly/data/My%20Music/iTunes/iTunes%20Music/Compilations/The%20Best%20Of%20Poison_%2020%20Years%20Of%20Rock/01%20Talk%20Dirty%20To%20Me.m4a</string>
<key>File Folder Count</key><integer>4</integer>
<key>Library Folder Count</key><integer>1</integer>
</dict>
它会输出这个:
Root element :plist
Current Element :dict
Major Version : 1
Minor Version : 1
Application version : 10.1
Features : 5
Music Folder : file://localhost//Thomts/Holly/data/My%20Music/iTunes/iTunes%20Music/
Library Persistent ID : 29E12A03204E0721
Current Element :dict
Major Version : 324
Minor Version : 324
Application version : Talk Dirty To Me
Features : 224866
Music Folder : Poison
Library Persistent ID : Poison
如您所见,它获取第一个元素的正确信息,然后获取第二个元素的错误信息。我想知道如何在第三个 dict 标签中获取所有信息,以便我可以获取歌曲的所有信息,例如曲目 ID、姓名、艺术家等。
【问题讨论】:
标签: java xml parsing dom xml-parsing