【问题标题】:How to parse this xml in c#?如何在 C# 中解析这个 xml?
【发布时间】:2013-04-11 11:17:54
【问题描述】:

我想将一个 xml 文件解析成一个字典,字典看起来像这样

"250", 0.110050251256281
"150", 0.810050256425628
"850", 0.701005025125628
"550", 0.910050251256281

如何将上面的数据从下面的 xml 文件中解析成字典

<?xml version="1.0" encoding="utf-8"?>
<calibration>
  <zoom level="250">0,110050251256281</zoom>
  <zoom level="150">0,810050256425628</zoom>
  <zoom level="850">0,701005025125628</zoom>
  <zoom level="550">0,910050251256281</zoom>
</calibration>

任何帮助将不胜感激

【问题讨论】:

  • 使用 StringReader 和 Split 分解 CSV 文件,然后使用 XDocument 创建 XML。 MSDN 上的大量信息。
  • 你已经有什么代码了?如果您显示它,我们可以尝试修复它。
  • 问题是……What have you tried?

标签: c# xml linq parsing


【解决方案1】:

你可以使用System.Xml.Linq.XDocument:

System.Xml.Linq.XDocument doc = System.Xml.Linq.XDocument.Load("your file");
var nodes = doc.Element("calibration").Elements("zoom");
Dictionary<string, double> myDictionary = new Dictionary<string, double>();

foreach (System.Xml.Linq.XElement item in nodes)
{
    var level = item.Attribute("level").Value;
    var val = double.Parse(item.Value);
    myDictionary.Add(level, var);
}

【讨论】:

    【解决方案2】:

    我会这样做:

      var xml = @"<?xml version="1.0" encoding="utf-8"?>
                  <calibration>
                      <zoom level="250">0,110050251256281</zoom>
                      <zoom level="150">0,810050256425628</zoom>
                      <zoom level="850">0,701005025125628</zoom>
                      <zoom level="550">0,910050251256281</zoom>
                  </calibration>"
    
      var doc = XDocument.Parse(xml);
      var zooms = doc.Descendants("zoom")
                     .ToDictionary(x => x.Attribute("level").Value, x => x.Value)
    

    【讨论】:

      【解决方案3】:

      试试下面...它会帮助你...

      代码:

       System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
       doc.Load(Environment.CurrentDirectory + "//XML//Sample.xml");
       System.Xml.XmlNodeList CNodes = doc.SelectNodes("/calibration/zoom");
       Dictionary<int, string> dictionary = new Dictionary<int, string>();
       foreach (System.Xml.XmlNode node in CNodes)
         dictionary.Add(Convert.ToInt32(node.Attributes["level"].Value), node.InnerText);
      

      输出:

      【讨论】:

      • op 已要求linq-xml 解决方案..这不能回答他的问题!..linq-xml 也比 old 低级 api跨度>
      【解决方案4】:

      使用 Linq:

      XDocument doc = XDocument.Load("XmlFile");
      var elements = (from items in doc.Elements("calibration").Elements("zoom")
                      select items).ToDictionary(x => x.Attribute("level").Value, x => Convert.ToDouble(x.Value));
      

      【讨论】:

        【解决方案5】:

        这样的事情应该可以工作。不要忘记添加一些错误处理,您可能希望从文件而不是硬编码字符串加载 xml。

        string xml = @"<?xml version=""1.0"" encoding=""utf-8""?>
        <calibration>
        <zoom level=""250"">0,110050251256281</zoom>
        <zoom level=""150"">0,810050256425628</zoom>
        <zoom level=""850"">0,701005025125628</zoom>
        <zoom level=""550"">0,910050251256281</zoom>
        </calibration>";
        
        System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();
        xmlDoc.LoadXml(xml);
        var nodes = xmlDoc.SelectNodes("calibration/zoom");
        var dicNodes = new Dictionary<string,string>();
        foreach (System.Xml.XmlNode node in nodes)
        {
            dicNodes.Add(node.Attributes["level"].Value, node.InnerText);
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多