c# - Sharepoint 2010 GetListView Linq XML -


trying process xml returned web service list.asmx sharepoint, , can't seem pull fields default view.

i have tried variations on following

    var viewfields = (from x in xdata.descendants(ns + "listandview")                      x.element("view").attribute("defaultview").tostring() == "true"                      select x.elements("viewfield")).tolist(); 

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

the linq statement should make sure returns fieldref view define default one, more 1 view can returned.

after guidance selman22 able accomplish doing following

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

here tostring return type name of attribute, not value.therefore statement return false , nothing.

x.element("view").attribute("defaultview").tostring() == "true" 

instead should use explicit cast attribute's value:

(string)x.element("view").attribute("defaultview") == "true" 

and trying select more 1 element x.elements("viewfield") should use selectmany instead list<xelement> :

xdata.descendants(ns + "listandview")      .where(x => (string)x.element("view").attribute("defaultview") == "true")      .selectmany(x => x.elements("viewfield"))      .tolist(); 

this should give viewfield elements.if want values of name attributes belongs fieldref elements use this:

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

Comments

Popular posts from this blog

php - SPIP: From Tag directly to an article -

jquery - isAjaxRequest always return false -

ruby on rails - In a controller spec, how to find a specific tag in the generated view? -