是否有人使用http:///_vti_bin/lists.asmx服务中的GetListItems()方法成功编写了从SharePoint 2007列表(特别是InfoPath表单库)中提取数据的代码(并告诉我们它)?它返回了我生命中看到的一些最差 XML(它甚至不符合XML)。是否有一些简单的方法来解析C#中的数据,或者我是否需要手动解析它?
对此的任何帮助将不胜感激。
答案 0 :(得分:2)
当然,这不是最漂亮的做事方式,但只需要获得正确的例子。
我使用以下代码从get list查询中获取“stuff”。
public static XmlNodeList XpathQuery(XmlNode xmlToQuery, string xPathQuery)
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlToQuery.OuterXml);
XmlNamespaceManager mg = new XmlNamespaceManager(doc.NameTable);
mg.AddNamespace("sp", "http://schemas.microsoft.com/sharepoint/soap/");
mg.AddNamespace("z", "#RowsetSchema");
mg.AddNamespace("rs", "urn:schemas-microsoft-com:rowset");
mg.AddNamespace("y", "http://schemas.microsoft.com/sharepoint/soap/ois");
mg.AddNamespace("w", "http://schemas.microsoft.com/WebPart/v2");
mg.AddNamespace("d", "http://schemas.microsoft.com/sharepoint/soap/directory");
return doc.SelectNodes(xPathQuery, mg);
}
使用
调用它 XmlNode items = lists.GetListItems(listName, string.Empty, listQuery, listViewFields, string.Empty, listQueryOptions, g.ToString());
foreach (XmlNode listItem in SPCollection.XpathQuery(items, "//sp:listitems/rs:data/z:row"))
{
XmlAttribute id = listItem.Attributes["ows_Id"];
if (id != null)
{
pageId = id.Value;
}
}
这个例子没有做很多,但希望它可以让你知道如何获取数据。 是的,我非常不喜欢XPathQueries的整个名称空间问题,但是你要做什么。
我对重写SharePoint Web服务并不感兴趣,特别是在我们的环境中测试和发布本身就需要花费数周的时间。但有时候,没有选择。例如。如果要访问SPWeb的自定义属性包或使用特定的站点模板和内容数据库(或Web服务中未实现的任何其他百万内容)创建SiteCollection。但是,对于简单的列表访问,Web服务看起来很好。
答案 1 :(得分:1)
InfoPath无法在列表Web服务中处理来自GetListItems的XML。使用InfoPath 2007,您有两种选择: