【问题标题】:How can I assign a set of values to a string or Int value?如何将一组值分配给字符串或 Int 值?
【发布时间】:2019-08-12 14:59:47
【问题描述】:

我有一个 C# 问题。 我设法从网页中解析出材料的价格(带有材料和价格列表),但我不知道如何将单个值提取为单个字符串或整数。我已将“价格”分配给一个字符串,但该字符串包含一个值数组。

这是 C# 代码:

var products = htmlDocument.DocumentNode.Descendants("div")
                .Where(node => node.GetAttributeValue("id", "")
                .Equals("accordion1")).ToList();

            var productListItems = products[0].Descendants("tr")
                .Where(node => node.GetAttributeValue("data-name", "")
                .Contains("")).ToList();

            foreach (var productListItem in productListItems)
            {
                Console.WriteLine(productListItem.GetAttributeValue("data-name", ""));
                var tds = productListItem.Descendants("td").ToList();

                var name = tds[0].InnerText;
                var price = tds[1].InnerText.Trim('$');

                Console.WriteLine(name);
                Console.WriteLine(price);
            }

控制台:

clay_r
Lehm
199

coal_r
Kohle
427

copper_r
Kupfer
312

etc.

现在我想要,我可以用一根绳子调用单一材料(如粘土)。这样我就为每个 materialPrice 提供了一个 int。

类似:

int clayPrice = int.Parse(the first price)
int coalPrice = int.Parse(the second price)
int copperPrice = int.Parse(the third price)

等等

我对 C# 很陌生,所以我不太了解它。我希望有人能理解我的问题并能帮助我。

【问题讨论】:

  • 您可能应该考虑创建一个单独的类来保存每个项目的所有信息。现在你有点不连贯地处理数据,正如你所看到的,将相关的“链接”在一起更麻烦。
  • 分配给“price”的字符串和int是否用换行符分隔?所有行中的模式都相同吗?

标签: c# visual-studio html-agility-pack


【解决方案1】:
  1. 定义一个包含定价信息的单独类。 例如:

    public class PriceInfo
    {
       public string Name {get; set;}
       public string RawPrice {get; set;}
       public int Price => int.Parse(RawPrice.Trim('$'));
    }
    
  2. 将字典定义为类成员。 Dictionary.

    Dictionary<string, PriceInfo> priceData = new Dictionary<string, PriceInfo>();
    
  3. 在您的循环中,将价格添加到字典中。

    foreach (var productListItem in productListItems)
    {
        Console.WriteLine(productListItem.GetAttributeValue("data-name", ""));
        var tds = productListItem.Descendants("td").ToList();
    
        var name = tds[0].InnerText;
        var price = tds[1].InnerText;
    
        // add to Dictionary
        priceData[name] = new PriceInfo
        {
          Name = name,
          RawPrice = price
        };
    }
    
  4. 使用值:

    priceData["somename"].Price
    

【讨论】:

猜你喜欢
  • 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
相关资源
最近更新 更多