开发者

How to parse .plist file in Java?

I am trying to parse a .plist file in Java but not understanding how. I used a DOM parser but it gives an error a开发者_StackOverflow社区nd is not able to read .plist file.

This is my plist file:

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>

This my main function:

 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();
}


If I were you I'd use the PList class from code.google.com/xmlwise. It's specifically designed for dealing with .plist files.


You will want to look at Apache Commons Configuration at http://commons.apache.org/proper/commons-configuration/, which offers a pList parser. Here's a snippet example:

        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());
        }


There is yet another project on github which is directly accessible for Maven-based projects: https://github.com/3breadt/dd-plist

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜