【问题标题】:parsing a xml file which contains more than one keyvalues using c#使用c#解析包含多个键值的xml文件
【发布时间】:2014-03-11 06:49:51
【问题描述】:

我有文件格式

<?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);
}

它给出了结果但错过了第二条记录的第二个值。我如何才能不失败地获得所有结果。

【问题讨论】:

  • 您使用SelectSingleNode,如名称所述,它返回单个节点。将SelectNodes 用于value

标签: c# xml c#-4.0 xml-parsing xml-serialization


【解决方案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:stringValues:List&lt;string&gt;。您可以轻松地将其更改为返回List&lt;Record&gt;,只需将f =&gt; new 更改为f =&gt; new Record 并更新属性信息。

如您所见,使用 LINQ to XML 获取 XML 内容比使用旧式 XmlSomething 类要容易得多。

【讨论】:

    【解决方案2】:

    如果您希望每个值都有一个单独的 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);
    }
    

    【讨论】:

      猜你喜欢
      • 2017-06-01
      • 1970-01-01
      • 2019-12-09
      • 2022-11-19
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 2014-12-26
      相关资源
      最近更新 更多