Example #1
0
        /// <summary>
        /// 获取表体中的所有的input和select标签的数据
        /// </summary>
        /// <param name="doc"></param>
        /// <returns>按照通道+节点的方式返回</returns>
        public static Dictionary <int, DataValue> GetData(HtmlAgilityPack.HtmlDocument doc)
        {
            var data = new Dictionary <int, DataValue>();

            int trCount    = GetTBodyOfTR(doc);                                                                         //最外层有几行
            int tableCount = GetContainTable(doc);                                                                      //内部包含几个table
            Dictionary <string, int> head = GetColName(doc);                                                            //列头的名称

            Dictionary <int, HtmlAgilityPack.HtmlNodeCollection> tbodyOfInputAndSelect = GetTBodyOfInputAndSelect(doc); //列

            foreach (var item in tbodyOfInputAndSelect.Keys)
            {
                HtmlAgilityPack.HtmlNodeCollection body = tbodyOfInputAndSelect[item];
                List <MYData> list = new List <MYData>();
                foreach (var b in body)
                {
                    MYData mydata = new MYData();
                    mydata.id        = b.Attributes["id"].Value;
                    mydata.name      = b.Attributes["name"].Value;
                    mydata.columnNum = head[mydata.name];
                    //mydata.rowNum = GetRowNum(mydata.id);
                    if (b.Name == "input")
                    {
                        if (b.Attributes["value"] != null)
                        {
                            mydata.value = b.Attributes["value"].Value;
                        }
                    }
                    else if (b.Name == "select")
                    {
                        var nodes = b.ChildNodes
                                    .Where(w => (w.Name == "option" && w.Attributes["selected"] != null))
                                    .Select(s => s.Attributes["value"].Value).FirstOrDefault();
                        string node = string.Empty;
                        if (null == (nodes))
                        {
                            mydata.value = b.ChildNodes
                                           .Where(w => (w.Name == "option"))
                                           .Select(s => s.Attributes["value"].Value).First();
                        }
                        else
                        {
                            mydata.value = nodes;
                        }
                    }

                    if (string.IsNullOrWhiteSpace(b.ParentNode.GetAttributeValue("rowspan", string.Empty)))
                    {
                        mydata.mergedRowNum = 1;
                    }
                    else
                    {
                        if (tableCount == 6)
                        {
                            if (mydata.id == "READVALUE_1_1_1")
                            {
                                var    tr    = 1;
                                string xpath = @"//table[@id='tongdao_1']//tbody[@class='myliangcheng_1']/tr | //table[@id='tongdao_1']//tbody[@class='myliangcheng_2']/tr";

                                var node = b.SelectNodes(xpath);
                                if (node != null)
                                {
                                    tr = node.Count;
                                }
                                mydata.mergedRowNum = tr;
                            }
                            else if (mydata.id == "READVALUE_1_3_1")
                            {
                                var    tr    = 1;
                                string xpath = @"//table[@id='tongdao_1']//tbody[@class='myliangcheng_3']/tr | //table[@id='tongdao_1']//tbody[@class='myliangcheng_4']/tr";

                                var node = b.SelectNodes(xpath);
                                if (node != null)
                                {
                                    tr = node.Count;
                                }
                                mydata.mergedRowNum = tr;
                            }
                            else if (mydata.id == "READVALUE_1_5_1")
                            {
                                var    tr    = 1;
                                string xpath = @"//table[@id='tongdao_1']//tbody[@class='myliangcheng_5']/tr | //table[@id='tongdao_1']//tbody[@class='myliangcheng_6']/tr";

                                var node = b.SelectNodes(xpath);
                                if (node != null)
                                {
                                    tr = node.Count;
                                }
                                mydata.mergedRowNum = tr;
                            }
                            else if (mydata.name == "ACTUALVALUE")
                            {
                                var    tr    = 1;
                                string xpath = @"../parent::*/child::td/table/tbody/tr";

                                var node = b.SelectNodes(xpath);
                                if (node != null)
                                {
                                    tr = node.Count;
                                }
                                mydata.mergedRowNum = tr;
                            }
                            else
                            {
                                int row = int.Parse(b.ParentNode.GetAttributeValue("rowspan", string.Empty));

                                mydata.mergedRowNum = row;
                            }
                        }
                        else
                        {
                            int row = int.Parse(b.ParentNode.GetAttributeValue("rowspan", string.Empty));
                            if (row > 1)
                            {
                                var tr   = 1;
                                var node = b.SelectNodes("../parent::*/parent::tbody/tr");
                                if (node != null)
                                {
                                    tr = node.Count;
                                }
                                //谁小就是谁
                                mydata.mergedRowNum = (tr > row) ? row : tr;
                            }
                            else
                            {
                                mydata.mergedRowNum = 1;
                            }
                        }
                    }

                    list.Add(mydata);
                }

                var q =
                    from p in list
                    group p by p.name into g
                    select new
                    KeyValue()
                {
                    Key   = g.Key,
                    Value = g.Sum(p => p.mergedRowNum)
                };
                var max = q.Select(s => s.Value).Max(m => m);


                var dat = from f in q
                          where f.Value < max
                          select f.Key;

                if (tableCount > 0)
                {
                    //表格嵌套
                    var change = from f in list
                                 where dat.Contains(f.name)
                                 select f;
                    foreach (var it in change)
                    {
                        //不平衡负载时有功电能误差

                        if (it.mergedRowNum > 1)
                        {
                            if (tableCount == 6)
                            {
                                if (it.mergedRowNum == 6)
                                {
                                    it.mergedRowNum = max;
                                }
                            }
                            else
                            {
                                throw new System.Exception("我没有遇到这要的情况");
                            }
                        }
                        else
                        {
                            it.mergedRowNum = max;
                        }
                    }
                }
                else
                {
                    if (dat != null && dat.Count() > 0)
                    {
                        throw new System.Exception("估计要出错,因为所有列的行数不一样");
                    }
                }

                data.Add(item, new DataValue()
                {
                    Count = max, Data = list
                });
            }

            return(data);//
        }
Example #2
0
        /// <summary>
        /// 不确定解析
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
        private static BuDueDingDu GetBuDueDingDu(string url)
        {
            BuDueDingDu buDueDingDu = new BuDueDingDu();

            try
            {
                docBuQueDingDu.Load(url);

                string xpath       = @"//select[@tag='only']";
                var    allselected = docBuQueDingDu.DocumentNode.SelectNodes(xpath);

                foreach (var b in allselected)
                {
                    var nodes = b.ChildNodes
                                .Where(w => (w.Name == "option" && w.Attributes["selected"] != null))
                                .Select(s => s.Attributes["value"].Value).FirstOrDefault();
                    string node = string.Empty;
                    if (null == (nodes))
                    {
                        node = b.ChildNodes
                               .Where(w => (w.Name == "option"))
                               .Select(s => s.Attributes["value"].Value).First();
                    }
                    else
                    {
                        node = nodes;
                    }


                    if (node != null)
                    {
                        if (b.Attributes["id"].Value == "pdDDL")
                        {
                            buDueDingDu.pdDDL = node;
                        }
                        else if (b.Attributes["id"].Value == "ddlSelectD")
                        {
                            buDueDingDu.ddlSelectD = node;
                        }
                        else if (b.Attributes["id"].Value == "ddlUA")
                        {
                            buDueDingDu.ddlUA = node;
                        }
                        else if (b.Attributes["id"].Value == "ddlUB")
                        {
                            buDueDingDu.ddlUB = node;
                        }
                        else if (b.Attributes["id"].Value == "ddlUC")
                        {
                            buDueDingDu.ddlUC = node;
                        }
                        else if (b.Attributes["id"].Value == "ddlUrel")
                        {
                            buDueDingDu.ddlUrel = node;
                        }
                    }
                }

                var xpathA = @"//input[@tag='only']";
                var A      = docBuQueDingDu.DocumentNode.SelectNodes(xpathA);
                foreach (var item in A)
                {
                    if (item.Attributes["id"].Value == "pdText")
                    {
                        buDueDingDu.pdText = item.Attributes["value"].Value;
                    }
                    else if (item.Attributes["id"].Value == "txtBuQueDingA")
                    {
                        buDueDingDu.txtBuQueDingA = item.Attributes["value"].Value;
                    }
                    else if (item.Attributes["id"].Value == "txtValue")
                    {
                        buDueDingDu.txtValue = item.Attributes["value"].Value;
                    }
                    else if (item.Attributes["id"].Value == "A_1_1")
                    {
                        buDueDingDu.A_1_1 = item.Attributes["value"].Value;
                    }
                    else if (item.Attributes["id"].Value == "A_1_2")
                    {
                        buDueDingDu.A_1_2 = item.Attributes["value"].Value;
                    }
                    else if (item.Attributes["id"].Value == "A_1_3")
                    {
                        buDueDingDu.A_1_3 = item.Attributes["value"].Value;
                    }
                    else if (item.Attributes["id"].Value == "A_1_4")
                    {
                        buDueDingDu.A_1_4 = item.Attributes["value"].Value;
                    }
                    else if (item.Attributes["id"].Value == "A_1_5")
                    {
                        buDueDingDu.A_1_5 = item.Attributes["value"].Value;
                    }
                    else if (item.Attributes["id"].Value == "A_2_1")
                    {
                        buDueDingDu.A_2_1 = item.Attributes["value"].Value;
                    }
                    else if (item.Attributes["id"].Value == "A_2_2")
                    {
                        buDueDingDu.A_2_2 = item.Attributes["value"].Value;
                    }
                    else if (item.Attributes["id"].Value == "A_2_3")
                    {
                        buDueDingDu.A_2_3 = item.Attributes["value"].Value;
                    }
                    else if (item.Attributes["id"].Value == "A_2_4")
                    {
                        buDueDingDu.A_2_4 = item.Attributes["value"].Value;
                    }
                    else if (item.Attributes["id"].Value == "A_2_5")
                    {
                        buDueDingDu.A_2_5 = item.Attributes["value"].Value;
                    }

                    else if (item.Attributes["id"].Value == "txtBuQueDingB")
                    {
                        buDueDingDu.txtBuQueDingB = item.Attributes["value"].Value;
                    }
                    else if (item.Attributes["id"].Value == "txtValueB")
                    {
                        buDueDingDu.txtValueB = item.Attributes["value"].Value;
                    }

                    else if (item.Attributes["id"].Value == "txtBuQueDingC")
                    {
                        buDueDingDu.txtBuQueDingC = item.Attributes["value"].Value;
                    }
                    else if (item.Attributes["id"].Value == "txtvalueD")
                    {
                        buDueDingDu.txtvalueD = item.Attributes["value"].Value;
                    }
                    else if (item.Attributes["id"].Value == "txtValueE")
                    {
                        buDueDingDu.txtValueE = item.Attributes["value"].Value;
                    }
                }
                Dictionary <string, int> head = new Dictionary <string, int>();
                head.Add("pingding1", 1);
                head.Add("pingding2", 2);
                head.Add("pingding3", 3);
                double i             = 0;
                var    xpathpingding = @"//ul[@tag='pingding']//input[@type='text'] | //ul[@tag='pingding']//select";
                var    pingding      = docBuQueDingDu.DocumentNode.SelectNodes(xpathpingding);
                if (pingding == null)
                {
                }
                else
                {
                    List <MYData> list = new List <MYData>();
                    foreach (var b in pingding)
                    {
                        i++;
                        MYData mydata = new MYData();
                        mydata.id        = b.Attributes["id"].Value;
                        mydata.name      = b.Attributes["name"].Value;
                        mydata.columnNum = head[mydata.name];
                        //mydata.rowNum = int.Parse(System.Math.Ceiling((i / 3)).ToString());
                        if (b.Name == "input")
                        {
                            if (b.Attributes["value"] != null)
                            {
                                mydata.value = b.Attributes["value"].Value;
                            }
                        }
                        else if (b.Name == "select")
                        {
                            var nodes = b.ChildNodes
                                        .Where(w => (w.Name == "option" && w.Attributes["selected"] != null))
                                        .Select(s => s.Attributes["value"].Value).FirstOrDefault();

                            if (null == (nodes))
                            {
                                mydata.value = b.ChildNodes
                                               .Where(w => (w.Name == "option"))
                                               .Select(s => s.Attributes["value"].Value).First();
                            }
                            else
                            {
                                mydata.value = nodes;
                            }
                        }
                        list.Add(mydata);
                    }
                    buDueDingDu.pingding = list;

                    Dictionary <string, int> headb = new Dictionary <string, int>();
                    headb.Add("B_PingDing", 1);
                    headb.Add("B_WuChaLaiYuan", 2);
                    headb.Add("sourceNum", 3);
                    headb.Add("B_WuChaXian", 4);
                    headb.Add("B_WuChaXian_UNIT", 5);
                    headb.Add("B_WuChaFenBu", 6);
                    headb.Add("B_K", 7);
                    headb.Add("B_Ui", 8);
                    headb.Add("B_Ui_UNIT", 9);
                    double ib             = 0;
                    var    xpathpingdingb = @"//tbody[@id='buquedingdub']//input[@type='text']";
                    var    pingdingb      = docBuQueDingDu.DocumentNode.SelectNodes(xpathpingdingb);
                    if (pingdingb == null)
                    {
                    }
                    else
                    {
                        List <MYData> listb = new List <MYData>();
                        foreach (var b in pingdingb)
                        {
                            ib++;
                            if (ib <= 9)//第一行数据隐藏数据不要打印
                            {
                                continue;
                            }
                            MYData mydata = new MYData();
                            mydata.id        = b.Attributes["id"].Value;
                            mydata.name      = b.Attributes["name"].Value;
                            mydata.columnNum = headb[mydata.name];
                            //mydata.rowNum = int.Parse(System.Math.Ceiling((ib / 3)).ToString());
                            if (b.Name == "input")
                            {
                                if (b.Attributes["value"] != null)
                                {
                                    mydata.value = b.Attributes["value"].Value;
                                }
                            }

                            listb.Add(mydata);
                        }
                        buDueDingDu.buDueDingDuB = listb;
                    }
                }
            }
            catch (Exception ex)
            {
                buDueDingDu = null;
            }

            return(buDueDingDu);
        }