2014-02-24 92 views
1

我這種格式有一個plist中:解析內層標籤

<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> 

我有一個字符串和列表中的一個類別章類:

我需要這樣的: 章節包含列表副標題像XYZ和ABC等... ChaptersONE包含ASDF一樣副主題列表等等...

現在,我已經嘗試過這樣的:

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

但我所有的主標題(像章和ChaptersOne頭),還有子主題只是分配給字符串,我在這裏做錯了什麼?

如何解決這個問題?

編輯 章節應該包含像XYZ和ABC副主題列表等等... ChaptersONE應該包含ASDF一樣副主題列表等等...

+0

你的問題不清楚。你的課怎麼看?預期的輸出如何?什麼是'highwayCode'? – MarcinJuraszek

+0

另外,爲什麼你需要使用'基於XmlReader'的代碼而不是基本的Linq-to-Xml? –

+0

請參閱我的編輯傢伙 – user2056563

回答

1

是的,有一個簡單的方法:

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(); 

你沒有顯示你的班,所以我認爲它看起來像這樣:

class Chapter 
{ 
    public string Title { get; set; } 
    public List<string> SubTitles { get; set; } 
} 
+0

好吧,我會嘗試,並讓你知道 – user2056563

+0

我這裏有一個問題,標題也是一個項目列表,SubTitles也是一個列表,所以如何檢查它的正確性,我的意思是打印它的值,? – user2056563

+0

我不知道你在說什麼... – MarcinJuraszek