2

C# を使用して、sharepoint リストの Choice 列の MultipleCheckbox アイテムを asp.net CheckBoxListItem にバインドしたいと考えています。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 から選択肢を読み取りたい。「Articles,Websites,Books」のみの値を取得します

注:<choices>この XML には、取得したい<fieldType>または DisplayName="Area" 属性を含む多くのセクションが含まれている可能性があり、C# で値を取得します。

4

2 に答える 2

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
于 2013-04-24T10:28:15.113 に答える
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
于 2013-04-24T10:28:16.463 に答える