Skip to main content
 首页 » 编程设计

c#之C# webservice 和/或 xpath 查询的 xml 输出问题

2025年05月04日91落叶无声

我构建的 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/"><a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e397869097d3d2d3d2a3878695d3d2cd8f8c80828f" rel="noreferrer noopener nofollow">[email protected]</a></email> 
    <password xmlns="http://dev01/">somepassword</password> 
</xml> 

因此,当我尝试通过执行/xml/result 来提取结果值时,它不起作用,我无法读出该值或进行调试,因为 Nintex 不允许我...我已经尝试过很多不同的 xpath 查询,但没有一个给出我想要的结果,知道我做错了什么吗?

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

请您参考如下方法:

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

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

namespace 管理器保存 namespace 及其使用的别名的列表。因此,在此示例中,您可以将别名“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);