c#xml解析 - 从php转换

时间:2013-12-04 14:25:13

标签: c# xml api

我目前在PHP上有我的应用程序/项目设置,我试图让它在c#中工作,所以我可以围绕它构建一个应用程序。

我遇到了一些我正在寻求帮助的代码部分。

  1. 来自http://api.eve-central.com/api/marketstat?usesystem=30000142&hours=48&typeid=34&typeid=456
  2. 的XML数据

    以上是来自某个系统的XML数据,该系统包含2个typeids(与其他XML相同),同样一次约有100个项目。

    我现在正在使用此代码:

    XDocument doc = XDocument.Load("http://api.eve-central.com/api/marketstat?typeid=34&typeid=35&usesystem=30000142");
    
    var id = from stats in doc.Root.Elements("marketstat")
             from type in stats.Elements("type")
             select new
             {
               typeID = type.Attribute("id").Value
             };
    
    foreach (var itemids in id)
    {
      kryptonListBox4.Items.Add(itemids.typeID);
    };
    

    将ListBox填充为34和456.

    我需要的是能够添加其他xml数据,例如min sell和max buy

    我可以像这样得到第一分钟的销售:

    string minSell = doc.Descendants("sell")
          .First()
          .Element("min")
          .Value;
    

    但是我需要有关于typeID的minsell,并且能够使用数据。

    第二个问题

    1. 来自http://api.eve-marketdata.com/api/item_history2.xml?char_name=demo&days=10&region_ids=10000002&type_ids=34,456
    2. 的XML数据

      以上是来自特定区域的XML数据,包含2个type_ids(当一次完成大约100个项目时,这将是一个更大的列表)。

      我尝试使用上面类似的代码,但我无法让它返回正确的数据。

      我需要能够获得每个typeid的总量

      在PHP中我使用:

      foreach ($xml -> result -> rowset-> row as $row)
      {
          $id = (string)$row['typeID'];
          $volume = $row['volume'];
          if (!isset($volumes[$id]))
          {
              $volumes[$id] = 0;
          }
          $volumes[$id] = $volumes[$id] + $volume;       
      }
      

      非常感谢任何帮助!

      //编辑:看起来我可以使用

      var vRow = from xmlRow in marketstats.Descendants("emd").Descendants("result").Descendants("rowset").Descendants("row")
                         select xmlRow;
      

      第二个问题,但我似乎无法使多维数组工作

1 个答案:

答案 0 :(得分:0)

对于你的第二个问题,如果我的理解是正确的,这将是你的需要。

var strxml = File.ReadAllText(@"D:\item_history2.xml");

        var xml = XElement.Parse(strxml);

        var typeIDs = (from obj in xml.Descendants("row")
                       select obj).Select(o => o.Attribute("typeID").Value).Distinct();


        Dictionary<string, long> kv = new Dictionary<string, long>();

        foreach (var item in typeIDs)
        {

            var sum = (from obj in xml.Descendants("row")
                       select obj).Where(o => o.Attribute("typeID").Value == item).Sum(p => long.Parse(p.Attribute("volume").Value));

            kv.Add(item, sum);
        }

在字典中,您将以这种方式获得每个typeID的卷总和

typeID为关键字,音量总和为字典kv。

中的值

对于你的第一个问题,

结帐,

var minsell = (from obj in xml.Descendants("type")
                       select new
                       {
                           typeid = obj.Attribute("id").Value,
                           minsell = obj.Descendants("sell").Descendants("min").FirstOrDefault().Value
                       }
                       ).ToArray();

这将为您提供与typeid相关的minsell值。 我猜这是你期望的吗? 如果有错,请评论。