2009-04-23 74 views
1

有没有人成功编写过使用http:///_vti_bin/lists.asmx中的GetListItems()方法从SharePoint 2007列表(特别是InfoPath表单库)提取数据的代码服务(并生活告诉它)?它返回一些最差 XML我这辈子见过的(它甚至不是兼容的XML)。有没有一些简单的方法来解析C#中的数据,或者我需要手动解析它?从SharePoint Web服务查询列表数据

任何帮助,将不胜感激。

回答

2

当然,这不是最好的做事方式,但它只是一个正确的例子。

我已经使用下面的代码来从获取列表查询中获取“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;      
     } 

    } 

的例子并不做了一大堆调用它,但希望它给你如何去获取数据出了个主意。 是的,我不喜欢intensly与XPathQueries整个命名空间的问题,但什么是你该怎么办。

我只是没有兴趣重写SharePoint Web服务,特别是在我们的环境中进行测试和发布需要数周的努力。有时候,没有选择。例如。如果你想访问的SPWeb的自定义属性袋或创建使用特定的网站模板和内容数据库(或任何未在Web服务中实现的其他东西万元)一SiteCollection。但是,对于简单的列表访问,Web服务看起来很好。

+0

我可以问一个非常愚蠢的问题吗?你是如何知道这些命名空间的? – senfo 2009-04-24 17:59:52

1

InfoPath无法在列表Web服务中处理来自GetListItems的XML。对于InfoPath 2007,您有两种选择:

  1. 使用不允许过滤列表内容的InfoPath 2007 SharePoint数据连接。你必须抓住所有的内容返回给客户端(或服务器,如果它是的InfoPath Forms Services),然后你的InfoPath规则中过滤。
  2. 编写一个驻留在SharePoint中的Web服务,该服务以InfoPath 2007可以消化的格式返回数据。我在那里你可以传递一个列表名称和CAML查询之前已经做到了这一点,并设置字段,它会返回名称/值对的行。不幸的是,我现在不允许分享这些代码。
+0

消费者实际上是一个C#控制台应用程序。我相信建立一个返回列表项的强类型集合会无限比原生的做法更容易定制的Web服务。感谢您的答复。 – senfo 2009-04-23 18:20:58