2009-04-23 24 views
1

http:///_vti_bin/lists.asmx(英語)のGetListItems()メソッドを使用してSharePoint 2007リスト(具体的にはInfoPathフォームライブラリ)からデータを抽出するコードを作成したことがありますか?サービス(とそれについて話すために住んでいた)?私は自分の人生の中で見た最悪の XMLを返します(これはXMLにも適合しません)。 C#でデータを解析する簡単な方法はありますか、それとも手動で解析する必要がありますか?SharePoint Webサービスからリストデータを照会

この上の任意の助けいただければ幸いです。

答えて

2

確かにそれは最も簡単な方法ではありませんが、正しい例を得ることだけです。

私は以下のコードを使用してget listsクエリから「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サービスはうまくいくようです。

+0

私は本当にばかげた質問をすることができますか?どのようにそれらの名前空間について知っていましたか? – senfo

+0

気にしない、見つけました。彼らはSharePointからの応答にあります。 – senfo

1

InfoPathは、リストWebサービス内のGetListItemsのXMLを処理できません。 InfoPath 2007には、次の2つのオプションがあります。

  1. リストの内容をフィルタリングすることができないInfoPath 2007 SharePointデータ接続を使用します。すべてのコンテンツをクライアント(InfoPath Forms Servicesの場合はサーバー)に戻し、InfoPathルール内でフィルタリングする必要があります。
  2. InfoPath 2007がダイジェストできる形式でデータを返すSharePoint内に存在するWebサービスを作成します。私はあなたがそれにリスト名とCAMLクエリとフィールドのセットを渡すことができる前にこれを行い、名前と値のペアの行を返します。残念ながら、このコードをこの時点で共有することはできません。
+0

コンシューマは実際にはC#コンソールアプリケーションです。厳密に型指定されたList項目のコレクションを返すカスタムWebサービスを構築することは、ネイティブアプローチよりも無限に簡単になると確信しています。回答いただきありがとうございます。 – senfo

関連する問題