2011-09-20 119 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。 –