public JToken LoadXml(XElement xmlDoc) { var topNode = xmlDoc.Element("dict").Element("array"); this.Items = new List <IPlistXmlItem>(); IPlistXmlItem tempItem = null; foreach (var node in topNode.Elements()) { tempItem = LoadXmlNode(node); if (null != tempItem) { tempItem.Uid = this.Items.Count; this.Items.Add(tempItem); } else { tempItem = new PListXmlItemString(); tempItem.Uid = this.Items.Count; this.Items.Add(tempItem); } } PListXmlItemDict root = this.Items[1] as PListXmlItemDict; return(GetJObject(root)); }
private JToken GetJObject(PListXmlItemDict dict) { if (dict.Value.Count == 2 && dict.Value.Keys.Contains("NS.objects") && dict.Value.Keys.Contains("$class")) { return(GetJToken(dict.Value["NS.objects"])); } if (dict.Value.Count == 2 && dict.Value.Keys.Contains("NS.string") && dict.Value.Keys.Contains("$class")) { return(GetJToken(dict.Value["NS.string"])); } else if (dict.Value.Count == 3 && dict.Value.Keys.Contains("NS.objects") && dict.Value.Keys.Contains("NS.keys") && dict.Value.Keys.Contains("$class") && dict.Value["NS.objects"] is PListXmlItemArray && dict.Value["NS.keys"] is PListXmlItemArray) { return(GetJToken(dict.Value["NS.keys"] as PListXmlItemArray, dict.Value["NS.objects"] as PListXmlItemArray)); } else { JObject jRoot = new JObject(); foreach (var item in dict.Value) { jRoot.Add(item.Key, GetJToken(item.Value)); } return(jRoot); } }
public static IPlistXmlItem LoadXmlNode(XElement node) { IPlistXmlItem tempItem = null; switch (node.Name.LocalName) { case "string": case "ustring": tempItem = new PListXmlItemString(); break; case "dict": tempItem = new PListXmlItemDict(); break; case "integer": tempItem = new PListXmlItemInteger(); break; case "array": tempItem = new PListXmlItemArray(); break; case "uid": tempItem = new PListXmlItemUid(); break; case "false": tempItem = new PListXmlItemFalse(); break; case "true": tempItem = new PListXmlItemTrue(); break; default: tempItem = null; break; } if (null != tempItem) { tempItem.Load(node); } return(tempItem); }