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
Post a Comment