0

我正在使用 C# 开发一个应用程序,该应用程序每天从几个不同的页面收集 Web 数据并将其保存在 SQL Server 中。我正在使用 html 敏捷包...目前我为数据库中的每个字段/列都有一个 xpath。表中有 62 列,通过检查正确的值和格式,下面的代码非常冗长和重复(特别是 xpath 表达式和相关块)。我想知道是否有更好,更简洁的方式,也许使用 LINQ?(我还没有使用太多但想使用)这只是下面设置的前几个字段,重复...... 62 cols。我不是在寻找重写,只是我能得到的任何建议。

List<IDataPoint> list = new List<IDataPoint>();
HtmlWeb hwObject = new HtmlWeb();
HtmlDocument htmlDoc = hwObject.Load(AddressString);

if (htmlDoc.DocumentNode != null && !htmlDoc.DocumentNode.InnerHtml.Contains("There is no key statistics data available"))
{
      var symbolNode = htmlDoc.DocumentNode.SelectSingleNode("/html/body/div[3]/div[4] /div/div/div/div/div/div/h2");
      if (symbolNode != null)
      {
            KeyStatsDP keyStatsDp = new KeyStatsDP();
            String symb = "";
            symb = symbolNode.InnerHtml;
            symb = symb.Substring(symb.LastIndexOf("(") + 1);
            symb = symb.Substring(0, symb.Length - 1);
            keyStatsDp.Symbol = symb;

            String mktCapXPath = "//*[@id=\"yfs_j10_" + symb.ToLower() + "\"]";
            var mktCapNode = htmlDoc.DocumentNode.SelectSingleNode(mktCapXPath);
            if (mktCapNode != null)
            {
                  String mktCap = mktCapNode.InnerHtml;
                  keyStatsDp.MarketCapIntraDay = ConvertMoneyInStrToInt(mktCap);
            }

            var entValNode = htmlDoc.DocumentNode.SelectSingleNode("//html/body/div[3]/div[4]/table[2]/tr[2]/td/table[2]/tr/td/table/tr[2]/td[2]");
            if (entValNode != null)
            {
                  if (!entValNode.InnerHtml.Contains("N"))
                  {
                        String entVal = entValNode.InnerHtml;
                        keyStatsDp.EntValue = ConvertMoneyInStrToInt(entVal);
                   }
            }
4

0 回答 0