You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XML解析异常:C#代码获取AccessToken节点返回null求排查

问题分析与解决

问题原因

你的问题出在XML命名空间的使用错误:

  • 根节点<act:Token>使用了act命名空间,但子节点<AccessToken>未添加act前缀,说明它属于无命名空间的节点。
  • 你在SelectSingleNode中使用//act:AccessToken,是在查找act命名空间下的AccessToken节点,自然匹配不到,因此返回null。

修正后的代码

将节点选择器修改为直接匹配无命名空间的AccessToken即可,也可以使用更精确的路径定位:

HttpClient apiP21 = new();
apiP21.DefaultRequestHeaders.Add("client_secret", "thesecret");
apiP21.DefaultRequestHeaders.Add("grant_type", "client_credentials");
apiP21.DefaultRequestHeaders.Add("username", "theuser");
var tokenRequestDataContent = new StringContent("", Encoding.UTF8, "application/xml");
var tokenResponse = apiP21.PostAsync("theendpoint", tokenRequestDataContent).Result;
if (!tokenResponse.IsSuccessStatusCode)
{
    return BadRequest("Could not get Security Token");
}
string tokenResponseRaw = tokenResponse.Content.ReadAsStringAsync().Result;

XmlDocument tokenResponseXML = new();
tokenResponseXML.LoadXml(tokenResponseRaw);
XmlNamespaceManager nsmgr = new(tokenResponseXML.NameTable);
nsmgr.AddNamespace("act", "http://distributionsuite.activant.com");
// 方案1:直接匹配无命名空间的AccessToken节点
XmlNode accessTokenNode = tokenResponseXML.SelectSingleNode("//AccessToken", nsmgr)!;
// 方案2:使用精确路径定位(更高效)
// XmlNode accessTokenNode = tokenResponseXML.SelectSingleNode("/act:Token/AccessToken", nsmgr)!;
string accessToken = accessTokenNode?.InnerText!;

补充说明:只有当节点明确带有命名空间前缀时,才需要在选择器中对应前缀;当前XML仅根节点属于act命名空间,所有子节点均为无命名空间节点,直接使用节点名称即可匹配。

内容的提问来源于stack exchange,提问作者Christopher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 04:46:04