2010-07-23 15 views
1

是否可以将以下字符串转换为Sharepoint API对象,如SPUser或SPUserValueField? (不解析它)xmlns到sharepoint api对象

"<my:Person xmlns:my=\"http://schemas.microsoft.com/office/infopath/2003/myXSD\"><my:DisplayName>devadmin</my:DisplayName><my:AccountId>GLINTT\\devadmin</my:AccountId><my:AccountType>User</my:AccountType></my:Person>" 

谢谢, 大卫埃斯特维斯

回答

0

是的,Microsoft.Office.Workflow.Utility程序集有Contact.ToContacts,它将将Person XML反序列化成Contact个实例。

http://msdn.microsoft.com/en-us/library/ms553588

-Oisin

+0

谢谢,那正是我正在寻找的。 – 2010-07-26 17:31:37

+0

是的,大约两年后我偶然发现了它。隐藏在API中的东西太多了。 – x0n 2010-07-26 21:22:24

0

解决:)

(只是一个例子) 下面的函数从人检索SPUser:

protected SPUser GetSPUserFromExtendedPropertiesDelegateTo(string xmnls_node) 
    { 

     StringBuilder oBuilder = new StringBuilder(); 
     System.IO.StringWriter oStringWriter = new System.IO.StringWriter(oBuilder); 
     System.Xml.XmlTextWriter oXmlWriter = new System.Xml.XmlTextWriter(oStringWriter); 
     oXmlWriter.Formatting = System.Xml.Formatting.Indented; 

     byte[] byteArray = Encoding.ASCII.GetBytes(xmnls_node); 
     MemoryStream stream = new MemoryStream(byteArray); 
     System.IO.Stream s = (Stream)stream; 

     System.IO.StreamReader _xmlFile = new System.IO.StreamReader(s); 

     string _content = _xmlFile.ReadToEnd(); 
     System.Xml.XmlDocument _doc = new System.Xml.XmlDocument(); 
     _doc.LoadXml(_content); 

     System.Xml.XPath.XPathNavigator navigator = _doc.CreateNavigator(); 
     System.Xml.XmlNamespaceManager manager = new System.Xml.XmlNamespaceManager(navigator.NameTable); 

     manager.AddNamespace("my", "http://schemas.microsoft.com/office/infopath/2003/myXSD"); 

     System.Xml.XmlNode _node = _doc.SelectSingleNode("/my:Person/my:AccountId", manager); 

     if (_node != null) 
     { 

      return this.workflowProperties.Web.EnsureUser(_node.InnerText.ToString()); 

     } 

     return null; 


    } 
+0

功能更新,检索SPUser对象,而不是与ACCOUNTID的字符串。无论如何,正确的方法是使用Oisin发布的函数。 – 2010-07-26 17:33:09