2013-04-24 124 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