2011-09-20 87 views
3

我正在嘗試解析Java中的.plist文件,但無法理解。我使用了一個DOM解析器,但它給出了一個錯誤,無法讀取.plist文件。如何解析Java中的.plist文件?

這是我的plist文件:

xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"                 "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
<key>All Samples</key> 
<array> 
    <dict> 
     <key>Message</key> 
     <string>1) UIATarget </string> 
     <key>Timestamp</key> 
     <date>2011-07-06T19:40:09Z</date> 
     <key>Type</key> 
     <integer>0</integer> 
    </dict> 

這是我main功能:

public static void main(String[] args) throws XMLStreamException, IOException { 
    InputStream in = new FileInputStream("File.plist"); 
    XMLInputFactory factory = XMLInputFactory.newInstance(); 
    XMLEventReader parser = factory.createXMLEventReader(in); 

    assert parser.nextEvent().isStartDocument(); 

    XMLEvent event = parser.nextTag(); 
    //System.out.println(event.getClass()); 
    assert event.isStartElement(); 
    final String name1 = event.asStartElement().getName().getLocalPart(); 

    if (name1.equals("dict")) { 
     while ((event = parser.nextTag()).isStartElement()) { 
      final String name2 = event.asStartElement().getName().getLocalPart(); 

      if (name2.equals("key")) { 
       String key = parser.getElementText(); 
       System.out.println("key: " + key); 

      } else if (name2.equals("String")) { 
       String number = parser.getElementText(); 
       System.out.println("date: " + number); 

      } else if (name2.equals("date")) { 
       String str = parser.getElementText(); 
       System.out.println("date: " + str); 
      } 
     } 
    } 

    assert parser.nextEvent().isEndDocument(); 
} 
+0

你確定你有完整的文件嗎?它看起來像結束標記丟失。 –

+0

dict文件關閉後結束標記相同然後標記 – jatin

+0

@Mark實際上,3結束標記丟失:'',''和''。 :) - 此外,缺少開始的<?? – Thomas

回答

6

如果我是你,我會用PList類從code.google.com/xmlwise。它專門爲處理.plist文件而設計。

+0

thanx 4回答,我從來沒有嘗試過這個,我會嘗試使用它 – jatin

1

你會想看看在Apache的共享配置在http://commons.apache.org/proper/commons-configuration/,它提供了一個PLIST解析器。這裏有一個片段的例子:

 XMLPropertyListConfiguration plist = new XMLPropertyListConfiguration(); 
     // load plist from classoath 
     URL url = this.getClass().getClassLoader().getResource(systemConfigFile); 
     plist.setFileName(url.getFile()); 
     plist.load(); 
     Iterator<String> keys = plist.getKeys(); 
     while (keys.hasNext()) { 
      // do someting with the value 
      plist.getString(keys.next()); 
     } 
+0

XMLPropertyListConfiguration有多年的掛起問題:https://issues.apache.org/jira/browse/CONFIGURATION-427 似乎是一個不好的選擇爲plist一代。它可以很好地解析plist文件。我最終選擇使用模板系統(Velocity)來生成plist文件。 – filamoon

+0

是的,真的 - 我從來沒有用過任何東西,只是閱讀。現在我更喜歡使用YAML。 –