使用c#解析包含多个键值的XML文件
本文关键字:键值 XML 文件 包含多 使用 | 更新日期: 2023-09-27 17:49:21
我有文件格式
<?xml version='1.0' encoding='us-ascii'?>
<root>
<file id="001">
<filename>ABC.wav</filename>
<value>0.18</value>
</file>
<file id="002">
<filename>EFG.wav</filename>
<value>0.05</value>
<value>0.14</value>
</file>
</root>
我想用c#解析
doc.Load(confidencethresholdFilePath+"''model.xml");
XmlNodeList nodes = doc.DocumentElement.SelectNodes("/root/file");
List<Result> results = new List<Result>();
foreach (XmlNode node in nodes)
{
Result result = new Result();
result.ASfilename= node.SelectSingleNode("filename").InnerText;
result.resultedSeconds = node.SelectSingleNode("value").InnerText;
results.Add(result);
}
给出结果,但忽略第二条记录的第二个值。
如何使用LINQ到XML?
var xDoc = XDocument.Load("Input.xml");
var results =
xDoc.Root
.Elements("file")
.Select(f => new
{
FileName = (string)f.Element("filename"),
Values = f.Elements("value").Select(v => (string)v).ToList()
})
.ToList();
results
将是具有两个属性的匿名类型实例列表:FileName:string
和Values:List<string>
。您可以轻松地将其更改为返回List<Record>
,只需将f => new
更改为f => new Record
并更新属性信息。
可以看到,使用LINQ to XML获取XML内容要比使用旧式的XmlSomething
类容易得多。
如果您希望每个值都有单独的Result并使用非linq样式,您可以更改初始选择。然后需要适当地更改文件名选择。
doc.Load(confidencethresholdFilePath+"''model.xml");
XmlNodeList nodes = doc.DocumentElement.SelectNodes("/root/file/value");
List<Result> results = new List<Result>();
foreach (XmlNode node in nodes)
{
Result result = new Result();
result.ASfilename= node.SelectSingleNode("../filename").InnerText;
result.resultedSeconds = node.SelectSingleNode("value").InnerText;
results.Add(result);
}