Создание plist с использованием Java - PullRequest
6 голосов
/ 24 июля 2010

Есть ли простой способ создать plist с помощью Java?Результат должен быть таким же, как при сериализации словаря в Objective C.

Ответы [ 5 ]

4 голосов
/ 24 июля 2010

Класс PList из code.google.com / xmlwise выглядит для меня более перспективным.

2 голосов
/ 23 июля 2012

Вам не нужны внешние библиотеки Java.Выполните следующие действия:

  1. Создайте пустой автономный документ DOM.

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    DOMImplementation di = builder.getDOMImplementation();
    DocumentType dt = di.createDocumentType("plist",
      "-//Apple//DTD PLIST 1.0//EN",
      "http://www.apple.com/DTDs/PropertyList-1.0.dtd");
    Document doc = di.createDocument("", "plist", dt);
    doc.setXmlStandalone(true);
    
  2. Установите версию для списка.

    Element root = doc.getDocumentElement();
    root.setAttribute("version", "1.0");
    
  3. Ввод данных.

    Element rootDict = doc.createElement("dict");
    root.appendChild(rootDict);
    Element sampleKey = doc.createElement("key");
    sampleKey.setTextContent("foo");
    rootDict.appendChild(sampleKey);
    Element sampleValue = doc.createElement("string");
    sampleValue.setTextContent("bar");
    rootDict.appendChild(sampleValue);
    
  4. Создание трансформатора.

    DOMSource domSource = new DOMSource(doc);
    TransformerFactory tf = TransformerFactory.newInstance();
    Transformer t = tf.newTransformer();
    t.setOutputProperty(OutputKeys.ENCODING, "UTF-16");
    t.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, dt.getPublicId());
    t.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, dt.getSystemId());
    t.setOutputProperty(OutputKeys.INDENT, "yes");
    t.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
    
  5. Запись вfile.

    StringWriter stringWriter = new StringWriter();
    StreamResult streamResult = new StreamResult(stringWriter);
    t.transform(domSource, streamResult);
    String xml = stringWriter.toString();
    System.out.println(xml); // Optionally output to standard output.
    OutputStream stream = new FileOutputStream("example.plist");
    Writer writer = new OutputStreamWriter(stream, "UTF-16");
    writer.write(xml);
    writer.close();
    

Затем вы можете прочитать такой файл в Objective-C, как описано в Руководство по программированию списка свойств .

1 голос
/ 18 сентября 2011

Вы можете использовать эту библиотеку: http://plist.sf.net/

Она будет записывать NSObjects в файлы и наоборот.

1 голос
/ 24 июля 2010

Здесь вы можете найти класс PList для очень простого создания PList.

0 голосов
/ 24 апреля 2014

Существующие ответы выглядят сложными для простых случаев. Вот более короткая ограниченная версия:

import java.io.File;
import java.io.IOException;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.commons.io.FileUtils;


public class PList {

    public static String toPlist(Map<String,String> map) {
        String s = "";
        s += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
        s += "<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n";
        s += "<plist version=\"1.0\">\n";
        s += "<dict>\n";

        for(Entry<String,String> entry : map.entrySet()) {
            s += "  <key>" + entry.getKey() + "</key>\n";
            s += "    <string>" + entry.getValue() + "</string>\n";
        }

        s += "</dict>\n";
        s += "</plist>\n";
        return s;
    }

    public static void writePlistToFile(Map<String,String> map, File f) throws IOException {
        FileUtils.writeStringToFile(f, toPlist(map), "utf-8");
    }

}
...