2013-04-24 81 views
2

我想將SharePoint的ChoiceList列中的MultipleCheckbox項目綁定到使用c#的asp.net CheckBoxListItem。我使用的XElement作爲retriving列表的信息:從XElement中讀取指定元素

XElement listStructure; 

listStructure = proxy.GetList("WebsiteSubscriber"); 
<Field Type="MultiChoice" DisplayName="Area" Required="FALSE" EnforceUniqueValues="FALSE" Indexed="FALSE" FillInChoice="FALSE" ID="{16cc1615-a490-44de-a870-c7ebe603e2cc}" SourceID="{2c8a80ea-38c5-48f7-9d7d-400d445a5e64}" StaticName="Area" Name="Area" ColName="ntext2" RowOrdinal="0"> 
    <Default>Articles</Default> 
    <CHOICES> 
    <CHOICE>Articles</CHOICE> 
    <CHOICE>Websites</CHOICE> 
    <CHOICE>Books</CHOICE> 
    </CHOICES> 
</Field> 

我想讀取該XML的選擇。只有獲得價值「文章,網站,書籍」

注:這個XML可能包含許多部分與<choices>我想<fieldType>或顯示名稱=「區域」屬性fetech,並在C#中獲取值。

回答

0

試試這個:

var temp = 
    listStructure.Descendants("Field") 
       .Where(i => i.Attribute("DisplayName").Value == "Area") 
          .Select(i => i.Descendants("CHOICE") 
              .Select(j => j.Value)).ToList(); 

List<string> result = new List<string>(); 

foreach (IEnumerable<string> item in temp) 
{ 
    result.AddRange(item); 
} 

//result: Articles; Websites; Books 
+0

你好@Hossein Narimani拉德遺憾地說,但我使用的XElement返回的XML,而不是XML文件。 – 2013-04-24 10:39:56

+0

這是我的完整的xml文件結構:http://www.fileswap.com/dl/XbSY9BEMpB/這是我在查詢XElement後得到的結果。內容是這個文件是Xelement的結果而不是xml文件。 PLZ幫助! – 2013-04-24 11:15:29

+0

@SHEKHARSHETE似乎是你的第一行問題!我在記事本中打開它,它顯示在兩行中。我關掉了'wordwrap'並且又是兩行。所以我刪除第二行並用'>'關閉'List'標籤。現在,每件事都在努力! – 2013-04-24 12:24:58

0
var xml = @"<Field Type=""MultiChoice"" DisplayName=""Area"" Required=""FALSE"" EnforceUniqueValues=""FALSE"" Indexed=""FALSE"" FillInChoice=""FALSE"" ID=""{16cc1615-a490-44de-a870-c7ebe603e2cc}"" SourceID=""{2c8a80ea-38c5-48f7-9d7d-400d445a5e64}"" StaticName=""Area"" Name=""Area"" ColName=""ntext2"" RowOrdinal=""0""> 
    <Default>Articles</Default> 
    <CHOICES> 
    <CHOICE>Articles</CHOICE> 
    <CHOICE>Websites</CHOICE> 
    <CHOICE>Books</CHOICE> 
    </CHOICES> 
</Field>"; 

var doc = XDocument.Parse(xml); 

XElement element = 
     doc.Descendants("Field") 
      .First(field => (string)field.Attribute("DisplayName") == "Area"); 


string[] result = 
     element.Descendants("CHOICE") 
       .Select(v => (string)v) 
       .ToArray(); 


Console.WriteLine(string.Join(Environment.NewLine, result)); 

打印:

Articles 
Websites 
Books 
+0

hello @llya lvanov plz注意我使用XElement而不是靜態文本。請讓我知道如何遍歷XElement ..? – 2013-04-24 10:31:02

+0

@SHEKHARSHETE更新了我的答案 – 2013-04-24 10:33:42

+0

錯誤:Squence不包含匹配元素。我是否需要將Xelement結果轉換爲XDocument? – 2013-04-24 10:43:17