在C#中解析Web Service返回的XML数据,通常可以通过 XmlDocument 或 XDocument(LINQ to XML)来实现。具体选择取决于你使用的.NET版本和个人偏好。以下是常用方法和示例。
使用 XmlDocument 解析 XML
XmlDocument 是基于 DOM 的类,适合处理结构较复杂的 XML,支持节点遍历和修改。
using System.Xml;
<p>// 假设 webServiceResult 是从 Web Service 获取的 XML 字符串
string webServiceResult = @"<Response>
<User>
<Id>123</Id>
<Name>张三</Name>
<Email>zhangsan@example.com</Email>
</User>
</Response>";</p><p>XmlDocument doc = new XmlDocument();
doc.LoadXml(webServiceResult);</p><p>XmlNode userNode = doc.SelectSingleNode("//User");
if (userNode != null)
{
string id = userNode["Id"]?.InnerText;
string name = userNode["Name"]?.InnerText;
string email = userNode["Email"]?.InnerText;</p><pre class='brush:php;toolbar:false;'>Console.WriteLine($"ID: {id}, Name: {name}, Email: {email}");}
使用 LINQ to XML (XDocument) 解析
XDocument 更现代,语法更简洁,推荐在 .NET 3.5 及以上版本使用。
using System.Xml.Linq;
<p>XDocument xDoc = XDocument.Parse(webServiceResult);</p><div class="aritcle_card flexRow">
<div class="artcardd flexRow">
<a class="aritcle_card_img" href="/ai/1277" title="Pixelcut"><img
src="https://www.herecours.com/d/file/efpub/2026/21-21/20260221135629179272.jpg" alt="Pixelcut" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a href="/ai/1277" title="Pixelcut">Pixelcut</a>
<p>AI产品图片处理——背景移除替换、物体抹除和图片放大</p>
</div>
<a href="/ai/1277" title="Pixelcut" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a>
</div>
</div><p>var user = xDoc.Descendants("User").FirstOrDefault();
if (user != null)
{
string id = user.Element("Id")?.Value;
string name = user.Element("Name")?.Value;
string email = user.Element("Email")?.Value;</p><pre class='brush:php;toolbar:false;'>Console.WriteLine($"ID: {id}, Name: {name}, Email: {email}");}
处理带命名空间的 XML
如果 Web Service 返回的 XML 包含命名空间,必须在查询时指定。
XNamespace ns = "http://example.com/namespace";
<p>var user = xDoc.Descendants(ns + "User").FirstOrDefault();
if (user != null)
{
string name = user.Element(ns + "Name")?.Value;
// 注意:每个元素都要加上命名空间
}</p>反序列化为对象(推荐用于固定结构)
如果你知道 XML 的结构,可以定义类并使用 XmlSerializer 自动映射。
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
}
<p>public class Response
{
public User User { get; set; }
}</p><p>// 反序列化
using (StringReader sr = new StringReader(webServiceResult))
{
XmlSerializer serializer = new XmlSerializer(typeof(Response));
Response response = (Response)serializer.Deserialize(sr);
Console.WriteLine($"{response.User.Name} - {response.User.Email}");
}</p>基本上就这些常见方式。如果 XML 结构简单,用 XDocument 更灵活;如果结构稳定,推荐反序列化为对象,代码更清晰、易维护。注意处理空值和异常,确保网络请求返回的数据有效。
