問題描述
我有一個這種格式的 plist:
I have a plist in this format:
<plist version="1.0">
<array>
<dict>
<key>Title</key>
<string>Chapters</string>
<key>Items</key>
<array>
<dict>
<key>Title</key>
<string>XYZ</string>
</dict>
<dict>
<key>Title</key>
<string>ABC</string>
</dict>
</array>
</dict>
<dict>
<key>Title</key>
<string>ChaptersONE</string>
<key>Items</key>
<array>
<dict>
<key>Title</key>
<string>ASDF</string>
</dict>
</array>
</dict>
</array>
我有一個帶有 String 和 List 的 Class Chapters 類:
I have a Class Chapters class with String and List :
我需要這樣的:章節包含諸如 XYZ 和 ABC 等子主題的列表......ChaptersONE 包含 ASDF 等子主題列表...
i need it like this: Chapters contains list of subtopics like XYZ and ABC and so on... ChaptersONE contains list of subtopics like ASDF and so on...
現在我已經這樣嘗試了:
Now i have tried it like this:
XDocument doc = XDocument.Load(FileName);// plist file name
XElement plist = doc.Element("plist");
XElement array = plist.Element("array");
Chapters chapters = null;
String keyValue = String.Empty;
chapters.listOfItems = new List<Chapters>();
using (XmlReader reader = array.CreateReader())
{
reader.MoveToContent();
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element)
{
if (reader.Name == "dict")
{
chapters = new Chapters();
listOfItems.Add(chapters);
}
else if (reader.Name == "key")
{
if (!reader.Read())
{
break;
}
else if (reader.NodeType == XmlNodeType.Text || reader.NodeType == XmlNodeType.CDATA)
{
keyValue = reader.Value;
}
}
else if (reader.Name == "string")
{
if (!reader.Read())
{
break;
}
else if (highwayCode != null && reader.NodeType == XmlNodeType.Text || reader.NodeType == XmlNodeType.CDATA)
{
switch (keyValue)
{
case "Title":
chapters.Header = reader.Value;
break;
case "Items":
break;
default:
break;
}
}
}
}
}
}
但是我所有的主標題(像 Chapters 和 ChaptersOne 這樣的標題)以及子主題都只是分配給字符串,我在這里做錯了什么?
But i all the Main title (Headers like Chapters and ChaptersOne) and also the subtopics are just assigning to only the string, what am i doing wrong here ?
如何解決這個問題?
編輯章節應包含 XYZ 和 ABC 等子主題列表...ChaptersONE 應包含 ASDF 等子主題列表...
EDIT Chapters should contains list of subtopics like XYZ and ABC and so on... ChaptersONE should contains list of subtopics like ASDF and so on...
推薦答案
是的,有一個更簡單的方法:
Yes, there is an easier way:
XDocument doc = XDocument.Load("input.xml");// plist file name
var chapters = (from d in doc.Root.Element("array").Elements("dict")
select new Chapter
{
Title = (string)d.Element("string"),
SubTitles = d.Element("array")
.Elements("dict")
.Elements("string")
.Select(s => (string)s)
.ToList()
}).ToList();
你沒有展示你的課程,所以我認為它看起來像這樣:
You didn't show your classes, so I assumed it looks like that:
class Chapter
{
public string Title { get; set; }
public List<string> SubTitles { get; set; }
}
這篇關于解析內部標簽及其值的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!