我想为我的WP7应用程序使用PHP内置的XML-RPC服务,但是如果不使用xml-rpc.net的库,我找不到任何示例。我无法创建对该库的引用,因为它不是使用Windows Phone运行时构建的(因为VS如此礼貌地通知我)。
关于stackoverflow上类似问题的海报(遗憾的是,我还不能添加注释)建议使用库的CF版本,但是当我尝试创建引用时出现同样的错误。
我想,如果没有办法使用该库,另一种方法是使用HttpWebRequest并手动解析XML。
提前感谢您的回复!
修改
这是返回的XML,我该如何解析?
XML响应:link text(对不起外部链接,我无法复制粘贴所有内容)
答案 0 :(得分:2)
查看我对this question的回答。
它显示了一个使用WebClient
从网站获取XML数据然后解析它的简单示例。这并不棘手。
虽然该示例使用WebClient,但在处理完成的线程时会阻塞UI线程,因此如果您对返回的XML的处理不是微不足道的话,您可能会考虑使用HttpWebRequest。
修改强>
您可以执行以下操作来处理您的回复:
var myStructs = new List<MyStruct>();
foreach (var child in xml.Elements("params").Elements("param").Elements("value").Elements("array").Elements("data").Elements("value"))
{
var newStruct = new MyStruct();
var members = child.Elements("struct").Elements("member");
foreach (var member in members)
{
switch (member.Elements("name").First().Value)
{
case "id":
newStruct.Id = int.Parse(member.Elements("value").First().Elements("int").First().Value);
break;
case "idParent":
newStruct.IdParent = int.Parse(member.Elements("value").First().Elements("int").First().Value);
break;
case "idUser":
newStruct.IdUser = int.Parse(member.Elements("value").First().Elements("int").First().Value);
break;
case "rating":
newStruct.IdUser = int.Parse(member.Elements("value").First().Elements("int").First().Value);
break;
case "imageUrl":
newStruct.ImageUrl = member.Elements("value").First().Elements("int").First().Value;
break;
case "message":
newStruct.Message = member.Elements("value").First().Elements("int").First().Value;
break;
case "title":
newStruct.Title = member.Elements("value").First().Elements("int").First().Value;
break;
case "username":
newStruct.Username = member.Elements("value").First().Elements("int").First().Value;
break;
case "ytVideoId":
newStruct.YtVideoId = member.Elements("value").First().Elements("int").First().Value;
break;
}
}
myStructs.Add(newStruct);
}
这假设您有以下
internal struct MyStruct
{
public int Id { get; set; }
public int IdParent { get; set; }
public int IdUser { get; set; }
public string Title { get; set; }
public string Message { get; set; }
public int Rating { get; set; }
public string Username { get; set; }
public string ImageUrl { get; set; }
public string YtVideoId { get; set; }
}
并且变量xml
是持有响应的XElement
。
我很高兴地承认它不漂亮,但它确实有效。您可能希望添加大量错误处理!