gpt4 book ai didi

c# - 有什么简单的方法可以将 XML 输出从共享点 GetListItems() 转换为 DataTable

转载 作者:行者123 更新时间:2023-11-30 16:33:25 24 4
gpt4 key购买 nike

我能够从共享点检索数据

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

我现在有了这个包含我所有数据的巨大 XML 博客。有什么简单的方法可以将其转换为数据表,所以我将其视为一个矩阵来遍历每一行??

我试过类似的东西,但它似乎不起作用:

System.IO.StringReader sr = new System.IO.StringReader(listitems.OuterXml);
XmlTextReader tr = new XmlTextReader(sr);
DataSet ds = new DataSet("resultDataSet");
ds.ReadXml(tr);

最佳答案

啊,从 GetListItems 返回的 xml 几乎与 SPListItemCollection.Xml 相同。我有一个将此 XML 转换为数据表的扩展方法。

您可以尝试对返回的 XML 使用 ConvertZRowToRegularXml 方法 - 您会得到 DataTable 可以理解的 XML。

the solution 的学分去文森特罗斯威尔。

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\">&lt;rows&gt;</xsl:text>" +
"<xsl:apply-templates select=\"//z:row\"/>" +
"<xsl:text disable-output-escaping=\"yes\">&lt;/rows&gt;</xsl:text>" +
"</xsl:template>" +
"<xsl:template match=\"z:row\">" +
"<xsl:text disable-output-escaping=\"yes\">&lt;row&gt;</xsl:text>" +
"<xsl:apply-templates select=\"@*\"/>" +
"<xsl:text disable-output-escaping=\"yes\">&lt;/row&gt;</xsl:text>" +
"</xsl:template>" +
"<xsl:template match=\"@*\">" +
"<xsl:text disable-output-escaping=\"yes\">&lt;</xsl:text>" +
"<xsl:value-of select=\"substring-after(name(), 'ows_')\"/>" +
"<xsl:text disable-output-escaping=\"yes\">&gt;</xsl:text>" +
"<xsl:value-of select=\".\"/>" +
"<xsl:text disable-output-escaping=\"yes\">&lt;/</xsl:text>" +
"<xsl:value-of select=\"substring-after(name(), 'ows_')\"/>" +
"<xsl:text disable-output-escaping=\"yes\">&gt;</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;
}
}
}

关于c# - 有什么简单的方法可以将 XML 输出从共享点 GetListItems() 转换为 DataTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3231688/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com