確かに、これは最も美しい方法ではありませんが、単に正しい例を取得するだけの問題です。
次のコードを使用して、リスト取得クエリから「もの」を取得しました。
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 サービスは問題ないようです。