问题描述
我能够
com.sharepoint2.Lists名单=新名单()检索SharePoint数据;
lists.Credentials =新System.Net.NetworkCredential(用户,PWD,域名);
lists.Url =http://sharepoint2.company.com/sites/mysite/_vti_bin/Lists.asmx;
XmlNode的ndQuery = xmlDoc.CreateNode(XmlNodeType.Element,查询,);
XmlNode的ndViewFields = xmlDoc.CreateNode(XmlNodeType.ElementViewFields,);
XmlNode的ndQueryOptions = xmlDoc.CreateNode(XmlNodeType.ElementQueryOptions,);
XmlNode的时listItems = lists.GetListItems(MYLIST,空,ndQuery,ndViewFields,空,ndQueryOptions,NULL);
我现在有我所有的数据,这个巨大的XML博客。有没有简单的方法将其转换为一个DataTable,所以我的每一行??对待这就像一个矩阵循环
我想这样的事情,但它不似乎工作:
System.IO.StringReader SR =新System.IO.StringReader(listitems.OuterXml);
XmlTextReader的TR = XmlTextReader的新(SR);
的DataSet DS =新的DataSet(resultDataSet);
ds.ReadXml(TR);
啊,XML从GetListItems返回的Almos酒店一样SPListItemCollection.Xml。我有一个转换这个XML为DataTable的扩展方法。
您可以只尝试使用 ConvertZRowToRegularXml
方法上的返回的XML - 而且你会得到的DataTable理解的XML
学分的去文森特罗斯韦尔的解决方案。
公共静态类SPListItemCollectionExtensions
{
公共静态只读字符串xsltFromZRowToXml =
<的xsl:样式版本= \1.0 \+
的xmlns:XSL = \http://www.w3.org/1999/XSL/Transform\+
的xmlns:S = \UUID :BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882\+
的xmlns:Z = \#RowsetSchema\>中+
< S:模式ID = \RowsetSchema\/>中+
< XSL:输出方法= \xml\省略的XML声明= \yes\/>中+
<的xsl:模板匹配= \/ \>中+
< XSL:文本禁用输出转义= \yes\>&放大器; LT;行&放大器; GT;< / XSL:文本>中+
< XSL:申请模板选择= \// Z:row\/>中+
< XSL:文本禁用输出转义= \yes\>&放大器; LT; /行和放大器; GT;< / XSL:文本>中+
< / XSL:模板>中+
<的xsl:模板匹配= \Z:row\>中+
< XSL:文本禁用输出转义= \yes\>&放大器; LT;排和放大器; GT;< / XSL:文本>中+
< XSL:申请模板选择= \@ * \/>中+
< XSL:文本禁用输出转义= \yes\>&放大器; LT; /行和放大器; GT;< / XSL:文本>中+
< / XSL:模板>中+
<的xsl:模板匹配= \@ * \>中+
< XSL:文本禁用输出转义= \yes\>&放大器; LT;< / XSL:文本>中+
<的xsl:value-of的选择= \子-后(名称(),OWS _')\/>中+
< XSL:文本禁用输出转义= \yes\>&放大器; GT;< / XSL:文本>中+
;:.\< XSL选择= \的价值,/>中+
< XSL:文本禁用输出转义= \yes\>&放大器; LT; /< / XSL:文本>中+
<的xsl:value-of的选择= \子-后(名称(),OWS _')\/>中+
< XSL:文本禁用输出转义= \yes\>&放大器; GT;< / XSL:文本>中+
< / XSL:模板>中+
< / XSL:样式>中;
公共静态数据表GetFullDataTable(此SPListItemCollection itemCollection)
{
的DataSet DS =新的DataSet();
串XMLDATA = ConvertZRowToRegularXml(itemCollection.Xml);
如果(string.IsNullOrEmpty(XMLDATA))
返回NULL;
使用(System.IO.StringReader SR =新System.IO.StringReader(XMLDATA))
{
ds.ReadXml(SR,XmlReadMode.Auto);
如果(ds.Tables.Count == 0)
返回NULL;
返回ds.Tables [0];
}
}
静态字符串ConvertZRowToRegularXml(字符串zRowData)
{
XslCompiledTransform变换=新XslCompiledTransform();
XmlDocument的tidyXsl =新的XmlDocument();
试
{
//变压器
tidyXsl.LoadXml(Balticovo.SharePoint.Extensions SPListItemCollectionExtensions.xsltFromZRowToXml);
transform.Load(tidyXsl);使用(TW的XmlTextWriter $ B使用
$ B //输出(结果)作家
(System.IO.StringWriter SW =新System.IO.StringWriter())
{
=新的XmlTextWriter(SW))
{
//源(输入)读者$ b $使用b(System.IO.StringReader srZRow =新System.IO.StringReader(zRowData))
{使用(XmlTextReader的xtrZRow = XmlTextReader的新(srZRow))
{
//变换
transform.Transform(xtrZRow,空,TW);
返回sw.ToString();
}
}
}
}
}
抓
{
返回NULL;
}
}
}
i am able to retrieve data from sharepoint
com.sharepoint2.Lists lists = new Lists();
lists.Credentials = new System.Net.NetworkCredential("user", "pwd", "domain");
lists.Url = "http://sharepoint2.company.com/sites/mysite/_vti_bin/Lists.asmx";
XmlNode ndQuery = xmlDoc.CreateNode(XmlNodeType.Element, "Query", "");
XmlNode ndViewFields = xmlDoc.CreateNode(XmlNodeType.Element, "ViewFields", "");
XmlNode ndQueryOptions = xmlDoc.CreateNode(XmlNodeType.Element, "QueryOptions", "");
XmlNode listitems = lists.GetListItems("MyList", null, ndQuery, ndViewFields, null,ndQueryOptions, null);
i now have this huge XML blog with all of my data. Is there any easy way to convert this to a datatable so i treat this like a matrix to loop through each row ??
i tried something like this but it doesn't seem to work:
System.IO.StringReader sr = new System.IO.StringReader(listitems.OuterXml);
XmlTextReader tr = new XmlTextReader(sr);
DataSet ds = new DataSet("resultDataSet");
ds.ReadXml(tr);
Ahh, xml returned from GetListItems is almos the same as SPListItemCollection.Xml. I have an extension method that converts this XML into datatable.
You can just try to use ConvertZRowToRegularXml
method on your returned XML - and you would get back an XML that DataTable understands.
Credits for the solution goes to Vincent Rothwell.
public static class SPListItemCollectionExtensions
{
public static readonly string xsltFromZRowToXml =
"<xsl:stylesheet version=\"1.0\" " +
"xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" " +
"xmlns:s=\"uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882\" " +
"xmlns:z=\"#RowsetSchema\">" +
"<s:Schema id=\"RowsetSchema\"/>" +
"<xsl:output method=\"xml\" omit-xml-declaration=\"yes\" />" +
"<xsl:template match=\"/\">" +
"<xsl:text disable-output-escaping=\"yes\"><rows></xsl:text>" +
"<xsl:apply-templates select=\"//z:row\"/>" +
"<xsl:text disable-output-escaping=\"yes\"></rows></xsl:text>" +
"</xsl:template>" +
"<xsl:template match=\"z:row\">" +
"<xsl:text disable-output-escaping=\"yes\"><row></xsl:text>" +
"<xsl:apply-templates select=\"@*\"/>" +
"<xsl:text disable-output-escaping=\"yes\"></row></xsl:text>" +
"</xsl:template>" +
"<xsl:template match=\"@*\">" +
"<xsl:text disable-output-escaping=\"yes\"><</xsl:text>" +
"<xsl:value-of select=\"substring-after(name(), 'ows_')\"/>" +
"<xsl:text disable-output-escaping=\"yes\">></xsl:text>" +
"<xsl:value-of select=\".\"/>" +
"<xsl:text disable-output-escaping=\"yes\"></</xsl:text>" +
"<xsl:value-of select=\"substring-after(name(), 'ows_')\"/>" +
"<xsl:text disable-output-escaping=\"yes\">></xsl:text>" +
"</xsl:template>" +
"</xsl:stylesheet>";
public static DataTable GetFullDataTable(this SPListItemCollection itemCollection)
{
DataSet ds = new DataSet();
string xmlData = ConvertZRowToRegularXml(itemCollection.Xml);
if (string.IsNullOrEmpty(xmlData))
return null;
using (System.IO.StringReader sr = new System.IO.StringReader(xmlData))
{
ds.ReadXml(sr, XmlReadMode.Auto);
if (ds.Tables.Count == 0)
return null;
return ds.Tables[0];
}
}
static string ConvertZRowToRegularXml(string zRowData)
{
XslCompiledTransform transform = new XslCompiledTransform();
XmlDocument tidyXsl = new XmlDocument();
try
{
//Transformer
tidyXsl.LoadXml(Balticovo.SharePoint.Extensions. SPListItemCollectionExtensions.xsltFromZRowToXml);
transform.Load(tidyXsl);
//output (result) writers
using (System.IO.StringWriter sw = new System.IO.StringWriter())
{
using (XmlTextWriter tw = new XmlTextWriter(sw))
{
//Source (input) readers
using (System.IO.StringReader srZRow = new System.IO.StringReader(zRowData))
{
using (XmlTextReader xtrZRow = new XmlTextReader(srZRow))
{
//Transform
transform.Transform(xtrZRow, null, tw);
return sw.ToString();
}
}
}
}
}
catch
{
return null;
}
}
}
这篇关于有没有简单的WASY从SharePoint GetListItems()XML输出转换为一个DataTable的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!