如何从指定XML节点提取Header内容并赋值给Header类对象?
问题描述
现有如下XML文件:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <MyResponse xmlns="http://mynamespace"> <Header> <FirstName>David</FirstName> <LastName>Duchovny</LastName> </Header> <Filmography> <Films> </Films> <Series> <Serie> <Title>X-Files</Title> <Year>1989</Year> </Serie> </Series> </Filmography> </MyResponse>
需要将其中的Header部分提取至以下Header类对象:
public class Header { public string FirstName { get; set; } public string LastName { get; set; } }
在不使用反序列化的前提下,已编写代码获取到Header节点(变量node对应内容如下):
<Header xmlns="http://mynamespace"> <FirstName>David</FirstName> <LastName>Duchovny</LastName> </Header>
请问如何将该Header节点的内容提取并赋值给Header类对象?
解决方案
基于已获取的node(Header节点)和已定义的namespaceManager,可以通过以下代码完成赋值:
// 实例化Header对象 var headerObj = new Header(); // 提取FirstName节点内容,需使用命名空间管理器匹配节点 var firstNameNode = node.SelectSingleNode("myApplication:FirstName", namespaceManager); if (firstNameNode != null) { headerObj.FirstName = firstNameNode.InnerText.Trim(); } // 提取LastName节点内容 var lastNameNode = node.SelectSingleNode("myApplication:LastName", namespaceManager); if (lastNameNode != null) { headerObj.LastName = lastNameNode.InnerText.Trim(); }
关键说明
- 由于XML节点带有指定命名空间
http://mynamespace,必须使用之前创建的namespaceManager查找子节点,否则会因命名空间不匹配无法定位目标节点。 - 使用
InnerText获取节点文本内容,搭配Trim()可去除文本前后的换行、空格等无效空白字符。 - 增加空值判断能避免空引用异常,提升代码的健壮性。
内容的提问来源于stack exchange,提问作者TheBoubou
相关产品推荐
相关产品推荐

