使用LINQ to XML访问XML中的元素类型

本文关键字:XML 元素 类型 访问 LINQ to 使用 | 更新日期: 2023-09-27 18:18:45

如下面的代码片段所示,XML文件中每个元素的名称各不相同。元素1为testcheck1类型,元素2为testcheck2.类型

<?xml version="1.0" encoding="utf-16"?>
<Tests xmlns="urn:lst-emp:emp">
  <testcheck1 xmlns="">
    <Type>string</Type>
    <Value>value1</Value>
  </testcheck1>
  <testcheck2 xmlns="">
    <Type>int</Type>
    <Value>1232</Value>
  </testcheck2>
</Tests>

我可以使用下面的代码:

XElement xelement = XElement.Load("project_data.xml");
IEnumerable<XElement> employees = xelement.Elements();
Console.WriteLine("List of all Values:");
foreach (var employee in employees)
{
    StreamWriter file2 = new StreamWriter("C:''tempFolder''results.xml", true);
    file2.WriteLine(employee.Element("Value").Value);
    file2.Close();
}

来获取XML文件中的每个值。(如value11232)。

我想知道是否有可能获得我在XML中定义的元素类型(如testcheck1testcheck2)使用LINQ到XML。

使用LINQ to XML访问XML中的元素类型

听起来你真的只是在寻找元素名称,可能是LocalName:

var root = XElement.Load("project_data.xml");
foreach (var element in root.Elements())
{
    Console.WriteLine("{0}: {1}", 
                      element.Name.LocalName,
                      element.Element("Value").Value);
}

(当Type子元素时,谈论元素的"类型"有点令人困惑,请注意…)

将打印出:

testcheck1: value1
testcheck2: 1232

Type元素和Value元素的获取方式相同:

foreach (var employee in employees)
{
    StreamWriter file2 = new StreamWriter("C:''tempFolder''results.xml", true);
    var value = (string)employee.Element("Value");
    var type = (string)employee.Element("Type");
    var name = e.Name.LocalName;
    // ...
}

你也可以创建一个匿名'employee'对象列表,其值和类型为:

var employees = from e in xelement.Elements()
                select new {
                   Name = e.Name.LocalName,
                   Type = (string)e.Element("Type"),
                   Value = (string)e.Element("Value")
                };
foreach (var employee in employees)
{
    // use employee.Name, employee.Type and employee.Value
}