我有文件格式
<?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);
}
它给出结果但是错过了第二个记录的第二个值。我怎样才能得到所有结果。
答案 0 :(得分:1)
如何使用LINQ to 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
类要容易得多。
答案 1 :(得分:0)
如果您想为每个值使用单独的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);
}