使用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);
}

给出结果,但忽略第二条记录的第二个值。

使用c#解析包含多个键值的XML文件

如何使用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:stringValues: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);
}