来自C#webservice和/或xpath查询的xml输出问题

时间:2009-08-27 10:10:58

标签: c# xml xpath

我构建的web服务默认返回XML,我添加了自己的XML节点,我需要在不同的应用程序(Nintex)中查询。我用Xpath做到了。但我似乎无法得到我想要的结果......

    public class Service1 : System.Web.Services.WebService
{
    public struct aduser
    {
        public String result;
        public String username;
        public String email;
        public String password;
    }

    [WebMethod]
    public aduser CreateADUser(string domain, ...

    ...
    ...
    ...

    user.result = "Succes";
    user.username = loginName;
    user.email = emailAddress;
    user.password = password;

    return user;
}

我得到的结果是

<xml>
    <result xmlns="http://dev01/">Succes</result>
    <username xmlns="http://dev01/">test0101</username>
    <email xmlns="http://dev01/">test0101@dev01.local</email>
    <password xmlns="http://dev01/">somepassword</password>
</xml>

所以当我尝试通过执行/ xml / result来提取例如结果值时它不起作用,我无法读出值或进行调试,因为Nintex不会让我...我试过了很多不同的xpath查询,但没有给出我想要的结果,任何想法我做错了什么?

这可能是一个新手问题,但我真的被困在这里: - (

2 个答案:

答案 0 :(得分:3)

我对Nintex产品一无所知,但您的问题是您需要通知您使用的任何XPath处理器有关“http://dev01/”命名空间的信息。

通常,这是通过使用命名空间管理器对象并关联XPath处理器或在执行XPath时作为参数传递来完成的。

命名空间管理器包含命名空间列表以及用于它们的别名。因此,在此示例中,您可以将别名'a'与“http://dev01/”相关联。您的XPath将变为: - /xml/a:result

这里有一个想法,就是它在C#中会是什么样子(如何将它移植到你不知道的Nintex工具中)。

XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("a", "http://dev01/");
XmlNode resultNode = doc.SelectSingleNode("/xml/a:result", nsmgr);

答案 1 :(得分:0)

由于在SharePoint GUI(以及所有其他操作)中配置了Nintex“调用Web服务”操作,因此无法使用C#代码解析Nintex中的XML输出,因此我并不认为之前的答案是某种方式相关的。

要了解Nintex的Web服务输出结果,您可以使用以下博客文章中描述的方法: http://vtonms.blogspot.com/2009/12/nintex-workflow-web-service-xml-result.html

当您从Web服务获得工作流变量实际获得的印象时,您可以轻松使用“查询XML”集成操作从XML获取所需的详细信息。希望这可以帮助。祝你好运!