private static XElement WriteElement(PlistElement el) { if (el is PlistElementBoolean) { var realEl = el as PlistElementBoolean; return(new XElement(realEl.value ? "true" : "false")); } if (el is PlistElementInteger) { var realEl = el as PlistElementInteger; return(new XElement("integer", realEl.value.ToString())); } if (el is PlistElementFloat) { var realEl = el as PlistElementFloat; return(new XElement("real", realEl.value.ToString())); } if (el is PlistElementString) { var realEl = el as PlistElementString; return(new XElement("string", realEl.value)); } if (el is PlistElementDateString) { var realEl = el as PlistElementDateString; return(new XElement("date", realEl.value)); } if (el is PlistElementDict) { var realEl = el as PlistElementDict; var dictXml = new XElement("dict"); foreach (var kv in realEl.values) { var keyXml = new XElement("key", kv.Key); var valueXml = WriteElement(kv.Value); if (valueXml != null) { dictXml.Add(keyXml); dictXml.Add(valueXml); } } return(dictXml); } if (el is PlistElementArray) { var realEl = el as PlistElementArray; var arrayXml = new XElement("array"); foreach (var v in realEl.values) { var elXml = WriteElement(v); if (elXml != null) { arrayXml.Add(elXml); } } return(arrayXml); } return(null); }
public void ReadFromString(string text) { XDocument doc = ParseXmlNoDtd(text); version = (string)doc.Root.Attribute("version"); XElement xml = doc.XPathSelectElement("plist/dict"); var dict = ReadElement(xml); if (dict == null) { throw new Exception("Error parsing plist file"); } root = dict as PlistElementDict; if (root == null) { throw new Exception("Malformed plist file"); } }
public PlistDocument() { root = new PlistElementDict(); version = "1.0"; }