2010-07-24 12 views

risposta

4

La classe PList da code.google.com/xmlwise sembra più promettente per me.

+0

Se si preferisce non utilizzare librerie di terze parti, vedere la risposta: http://stackoverflow.com/a/11619384/974531 –

1

Here è possibile trovare una classe PList per la creazione di PList molto facilmente.

2

Non sono necessarie librerie Java esterne. Attenersi alla seguente procedura:

  1. Creare un documento DOM vuoto autonomo.

    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. Imposta versione plist.

    Element root = doc.getDocumentElement(); 
    root.setAttribute("version", "1.0"); 
    
  3. Inserire dati.

    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. Creare un trasformatore.

    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. Scrivere al 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(); 
    

si può quindi leggere un tale file in Objective-C come descritto dal Property List Programming Guide.

0

Le risposte esistenti sembrano complicate per casi semplici. Ecco una versione ridotta più breve:

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

} 
Problemi correlati