在C#中解析XML响应,提取credentials中的token值
在C#中解析XML响应获取token值
要解析这份带命名空间的XML并提取credentials节点的token属性,你可以用以下几种常见的C#实现方式:
方法1:使用LINQ to XML(XDocument)
这种方式简洁直观,适合.NET Framework 3.5及以上版本:
using System; using System.Xml.Linq; class Program { static void Main() { // 假设xmlResponse是你获取到的XML字符串 string xmlResponse = @"<?xml version='1.0' encoding='UTF-8'?> <tsResponse xmlns=""site.com/api"" xmlns:xsi=""site.org/2001/XMLSchema-instance"" xsi:schemaLocation=""site.com/api help.site.com/samples/en-us/rest_api/ts-api_3_4.xsd""> <credentials token=""xxxxxx-xxxxxx-xxxxxx""> <site id=""xxxxxx-xxxxxx-xxxxxx"" contentUrl=""sitename""/> <user id=""xxxxxx-xxxxxx-xxxxxx""/> </credentials> </tsResponse>"; // 定义XML命名空间 XNamespace ns = "site.com/api"; // 加载XML文档 XDocument doc = XDocument.Parse(xmlResponse); // 查询credentials节点并获取token属性 string token = doc.Element(ns + "tsResponse")? .Element(ns + "credentials")? .Attribute("token")? .Value; Console.WriteLine("Token值:" + token); } }
方法2:使用XmlDocument
这是传统的DOM解析方式,兼容更早的.NET版本:
using System; using System.Xml; class Program { static void Main() { string xmlResponse = @"<?xml version='1.0' encoding='UTF-8'?> <tsResponse xmlns=""site.com/api"" xmlns:xsi=""site.org/2001/XMLSchema-instance"" xsi:schemaLocation=""site.com/api help.site.com/samples/en-us/rest_api/ts-api_3_4.xsd""> <credentials token=""xxxxxx-xxxxxx-xxxxxx""> <site id=""xxxxxx-xxxxxx-xxxxxx"" contentUrl=""sitename""/> <user id=""xxxxxx-xxxxxx-xxxxxx""/> </credentials> </tsResponse>"; XmlDocument doc = new XmlDocument(); doc.LoadXml(xmlResponse); // 创建命名空间管理器 XmlNamespaceManager nsManager = new XmlNamespaceManager(doc.NameTable); nsManager.AddNamespace("ns", "site.com/api"); // 选择credentials节点 XmlNode credentialsNode = doc.SelectSingleNode("//ns:tsResponse/ns:credentials", nsManager); if (credentialsNode != null) { string token = credentialsNode.Attributes["token"]?.Value; Console.WriteLine("Token值:" + token); } } }
关键注意点
- 必须处理XML的命名空间:因为根节点
tsResponse带有xmlns="site.com/api"命名空间,所有子节点默认继承该命名空间,解析时必须指定,否则会找不到目标节点。 - 代码中使用了空传播运算符
?.来避免空引用异常,确保节点或属性不存在时不会崩溃。
内容的提问来源于stack exchange,提问作者Angel Davila
相关产品推荐
相关产品推荐

