簡體   English   中英

Sharepoint 2010 GetListView Linq XML

[英]Sharepoint 2010 GetListView Linq XML

試圖處理Web服務List.asmx從sharepoint返回的XML,我似乎無法從默認視圖中拉出字段。

我嘗試了以下變化

    var viewFields = (from x in xData.Descendants(ns + "ListAndView")
                     where x.Element("View").Attribute("DefaultView").ToString() == "TRUE"
                     select x.Elements("ViewField")).ToList();

樣本XML

    <ListAndView xmlns="http://schemas.microsoft.com/sharepoint/soap/">
      <List DocTemplateUrl="">
        <Fields>
          <Field ID="{03e45e84-1992-4d42-9116-26f756012634}" DisplayName="test" Name="test"/>
        </Fields>
        <RegionalSettings>
          <Language>1033</Language>
          <Locale>1033</Locale>
          <AdvanceHijri>0</AdvanceHijri>
          <CalendarType>1</CalendarType>
          <Time24>False</Time24>
          <TimeZone>480</TimeZone>
          <SortOrder>2070</SortOrder>
          <Presence>False</Presence>
        </RegionalSettings>
        <ServerSettings>
          <ServerVersion>0</ServerVersion>
          <RecycleBinEnabled>True</RecycleBinEnabled>
          <ServerRelativeUrl>/test</ServerRelativeUrl>
        </ServerSettings>
      </List>
      <View Name="{2EDDCDF0-B93D-41A9-83B9-89E347ED93F9}" DefaultView="TRUE" >
        <Query>
          <OrderBy>
            <FieldRef Name="ID" Ascending="FALSE" />
          </OrderBy>
        </Query>
        <ViewFields>
          <FieldRef Name="field1" />
          <FieldRef Name="field2" />
          <FieldRef Name="field3" />
        </ViewFields>
      </View>
    </ListAndView>

linq語句應確保它僅從定義為默認視圖的視圖中返回FieldRef,可以返回多個視圖。

經過Selman22的一些指導后,我能夠通過執行以下操作來完成此操作

var view = xData.Descendants(ns + "View").Where(x => (string)x.Attribute("DefaultView") == "TRUE");
var f = (from x in view.Descendants(ns + "FieldRef")
        select (string) x.Attribute("Name")).ToList();

在這里ToString將返回Attribute 類型名稱 ,而不是Value 。因此,此語句將始終返回false,而您一無所獲。

x.Element("View").Attribute("DefaultView").ToString() == "TRUE"

相反,您應該使用顯式強制轉換來獲取屬性的值:

(string)x.Element("View").Attribute("DefaultView") == "TRUE"

並且您嘗試使用x.Elements("ViewField") Select多個元素,因此您應該使用SelectMany來獲取List<XElement>

xData.Descendants(ns + "ListAndView")
     .Where(x => (string)x.Element("View").Attribute("DefaultView") == "TRUE")
     .SelectMany(x => x.Elements("ViewField"))
     .ToList();

這應該為您提供所有ViewField元素。如果只希望屬於FieldRef元素的Name屬性的Values ,請使用以下命令:

xData.Descendants(ns + "ListAndView")
     .Where(x => (string)x.Element("View").Attribute("DefaultView") == "TRUE")
     .SelectMany(x => x.Elements("ViewField"))
     .SelectMany(x => x.Elements("FieldRef").Select(y => (string)y.Attribute("Name")))
     .ToList();

您可以在沒有linq的情況下嘗試嗎?

這就是我會做的。

假設您具有以下對象:

var listItems = client.GetListItems(listGuid, null, null, viewFields,
                                            null, null, null);

我會使用一個簡單的for循環遍歷集合的視場:

var listOfViewFields = new List<string>();

foreach (XmlNode node in listItems)
{
   if (node.Name == "rs:data")
   {
      for (int f = 0; f < node.ChildNodes.Count; f++)
      {
      if (node.ChildNodes[f].Name == "z:row")
      {
        var xmlAttributeCollection = node.ChildNodes[f].Attributes;
        if (xmlAttributeCollection != null)
        {
            listOfViewFields.Add(xmlAttributeCollection["ows_FIELD YOU WISH TO RETRIEVE"].Value);
        }
     }
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM