使用Windows Phone 7应用程序使用XML-RPC服务

时间:2010-11-25 11:52:43

标签: windows-phone-7 xml-rpc

我想为我的WP7应用程序使用PHP内置的XML-RPC服务,但是如果不使用xml-rpc.net的库,我找不到任何示例。我无法创建对该库的引用,因为它不是使用Windows Phone运行时构建的(因为VS如此礼貌地通知我)。

关于stackoverflow上类似问题的海报(遗憾的是,我还不能添加注释)建议使用库的CF版本,但是当我尝试创建引用时出现同样的错误。

我想,如果没有办法使用该库,另一种方法是使用HttpWebRequest并手动解析XML。

提前感谢您的回复!

修改

这是返回的XML,我该如何解析?

XML响应:link text(对不起外部链接,我无法复制粘贴所有内容)

1 个答案:

答案 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

我很高兴地承认它不漂亮,但它确实有效。您可能希望添加大量错误处理!