如下面的代码片段所示,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文件中的每个值。 (例如value1
和1232
)。
我想知道是否有可能使用LINQ to XML获取我在XML中定义的元素类型(如testcheck1
和testcheck2
)。
答案 0 :(得分:2)
听起来你真的只是在寻找元素名称,可能是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
子元素时,谈论&#34;类型&#34;元素有点令人困惑,请注意......)
那将打印出来:
testcheck1: value1
testcheck2: 1232
答案 1 :(得分:1)
您可以将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;
// ...
}
您还可以创建匿名&#39;员工&#39;具有值和类型的对象:
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
}