用C#读取XML指定节点下的值
-------------------XML code
<Employees>
<Employee name="李宇秋" age="23">
<Address>
长江路178号
</Address>
<Department>
演唱部
</Department>
</Employee>
<Employee name="曾不可" age="24">
<Address>
火星路239号
</Address>
<Department>
舞蹈部
</Department>
</Employee>
<Employee name="张学敌" age="27">
<Address>
香港街13号
</Address>
<Department>
偶像部
</Department>
</Employee>
</Employees>
--------------比如:要获取 name="曾不可" 的节点下面的 Address 节点的值“火星路239号”,C#如何实现?
OK,在linq之前,可以试用XMLDocment将xml整个文件读进来,然后比如可以用xpath再进行分析。
自从有了linq,一切都变得简单了,实现代码如下:
//假设以上xml我们保存在一个本地xml文件 D:\Microsoft Work\XMLPath\sampleXML.xml 中
public List<string> GetXMLResult()
{
XElement xelement = XElement.Parse(@"D:\Microsoft Work\XMLPath\sampleXML.xml");
var query = xelement.Descendants("Employee").Where(x => x.Attribute("name").Value == "曾不可").Select(x => x.Element("Address").Value);
if (query != null && query.Count() > 0)
return query.ToList<string>();
return null;
}
这样即可。
OK,我们现在将上面的XML结构稍作改动一下,
-------------------XML code
<Employees>
<Employee name="李宇秋" age="23">
<Address>
<Province>
长江省
</Province>
<Road>
长江路178号
</Road>
</Address>
<Department>
演唱部
</Department>
</Employee>
<Employee name="曾不可" age="24">
<Address>
<Province>
火星省
</Province>
<Road>
火星路239号
</Road>
<Address>
<Department>
舞蹈部
</Department>
</Employee>
<Employee name="张学敌" age="27">
<Address>
<Province>
香港省
</Province>
<Road>
香港街239号
</Road>
<Address>
<Department>
偶像部
</Department>
</Employee>
</Employees>
--------------现在:仍然是要获取 name="曾不可" 的节点下面的 Address 节点下Road结点的值“火星路239号”,
--------------C#如何实现?
OK,这时候linq的优势就很明显了,实现代码如下:
private List<string> GetXMLResult(string xmlPath, string employeeName)
{
XElement xelement = XElement.Load(xmlPath);
var query = xelement.Descendants("Employee").SingleOrDefault(x => x.Attribute("name").Value == employeeName);
if (query != null && query.Count() > 0)
{
var queryResult = query.Descendants("Road").Select(m => m.Value);
if (queryResult.Count() > 0)
return queryResult.ToList<string>();
}
return null;
}
如果没有Linq To XML,用xpath也可以解决这样的取值问题,但是会变得复杂很多。
你好,这是 Leco's 开发笔记,转载请注明出处:http://www.cnblogs.com/leco

浙公网安备 33010602011771号