Working With SharePoint Web Services
One of the most confounding things about working with the SharePoint web services is that the return values are all in XML strings (wrapped in an XmlNode).
To make working with the services even more puzzling, suppose you get a result like so:
<ContentType
ID="0x010100347433A509750F4D88880291599D314D04"
Name="My Content Type"
Group="My Custom Content Types"
Version="7" xmlns="http://schemas.microsoft.com/sharepoint/soap/">
<Folder TargetName="_cts/My Content Type" />
<Fields>
<Field ... />
<Field ... />
<Field ... />
<Field ... />
</Fields>
<XmlDocuments>
<XmlDocument
NamespaceURI="http://schemas.microsoft.com/sharepoint/v3/contenttype/forms">
<FormTemplates
xmlns="http://schemas.microsoft.com/sharepoint/v3/contenttype/forms">
<Display>DocumentLibraryForm</Display>
<Edit>DocumentLibraryForm</Edit>
<New>DocumentLibraryForm</New>
</FormTemplates>
</XmlDocument>
</XmlDocuments>
</ContentType>
You would expect to be able to retrieve all of the <Field /> elements by executing the following code:
XmlNodeList nodes = xmlResponse.SelectNodes("//Field");
But it's not quite so straight forward. You actually have to instantiate an XmlNamespaceManager with a bogus prefix:
NameTable table = new NameTable();
XmlNamespaceManager manager = new XmlNamespaceManager(table);
manager.AddNamespace("sp", "http://schemas.microsoft.com/sharepoint/soap/");
XmlNodeList nodes = xmlResponse.SelectNodes("//sp:Field", manager);
In this case, I used "sp" as my prefix. Notice that it's utilized in the XPath query as well.
