Пример #1
0
        public bool getXmlData(ref XmlDocument retdoc, ref XmlDocument xmlschemaDoc, ref string msg, bool onlyFirstPage = true, bool onlyOrgData = false)
        {
            JdUnion_Bussiness_Class jdyreq = this;
            string      strDefaultName     = "DataTable1";
            string      strRootName        = "NewDataSet";
            string      ret = null;
            XmlDocument doc = new XmlDocument();

            if (xmlschemaDoc == null)
            {
                xmlschemaDoc = new XmlDocument();
            }
            msg = null;
            try
            {
                //jdyreq.InitClass(jdyreq.Module);
                jdyreq.sign = null;
                if (jdyreq is JdUnion_Bussiness_List_Class)
                {
                    (jdyreq as JdUnion_Bussiness_List_Class).RequestSizeAndPage((jdyreq as JdUnion_Bussiness_List_Class).pager.pageSize, 1, null);
                }
                jdyreq.InitRequestJson();
                ret          = jdyreq.GetRequest();
                xmlschemaDoc = jdyreq.getRequestSchema();
                XmlSchemaClass xmlSchema = new XmlSchemaClass(xmlschemaDoc);
                //string strXml = XML_JSON.Json2XML(ret);
                XmlDocument tmp = jdyreq.getRealXml(ret, out msg);
                if (msg != null)
                {
                    return(false);
                }
                doc.LoadXml(tmp.OuterXml);
                if (onlyOrgData)
                {
                    if (retdoc == null)
                    {
                        retdoc = new XmlDocument();
                    }
                    retdoc.LoadXml(tmp.OuterXml);
                    return(true);
                }
                if (jdyreq is JdUnion_Bussiness_List_Class)
                {
                    if (onlyFirstPage)
                    {
                        return(getXmlDataSet(doc, xmlSchema, ref retdoc, ref msg));
                        //return true;
                    }
                    //return true;
                }
                else
                {
                    return(getXmlDataSet(doc, xmlSchema, ref retdoc, ref msg));
                }


                int?totalCount = XmlNodeIntVal(doc, xmlSchema.rootNodePath, xmlSchema.totalCountItemName); //, //int.Parse(XmlUtil.GetSubNodeText(tmp, xmlSchema.pageCountItemName));
                int?totalsize  = XmlNodeIntVal(doc, xmlSchema.rootNodePath, xmlSchema.pageSizeItemName);
                if (totalsize == null)
                {
                    totalsize = (this as JdUnion_Bussiness_List_Class).pager.pageSize;//按实际返回的数量计算页大小
                }
                int totalPage = (totalCount.Value / totalsize.Value) + ((totalCount.Value % totalsize.Value) == 0 ? 0 : 1);
                if (totalPage > 1)//如果不止一页
                {
                    XmlNode rootnode = doc.SelectSingleNode(xmlSchema.rootNodePath);
                    for (int i = 2; i <= totalPage; i++)
                    {
                        (jdyreq as JdUnion_Bussiness_List_Class).RequestSizeAndPage((this as JdUnion_Bussiness_List_Class).pager.pageSize, i, null);
                        jdyreq.sign = null;//必须重置
                        jdyreq.InitRequestJson();
                        ret = jdyreq.GetRequest();

                        XmlDocument ntmp = jdyreq.getRealXml(ret, out msg);
                        if (msg != null)
                        {
                            continue;
                            //return false;
                        }
                        string xpath = string.Format("{0}/{1}", xmlSchema.rootNodePath, xmlSchema.dataItemName);
                        foreach (XmlNode node in ntmp.SelectNodes(xpath))//子节点全部加入根结点
                        {
                            rootnode.AppendChild(doc.ImportNode(node, true));
                        }
                    }
                }
                return(getXmlDataSet(doc, xmlSchema, ref retdoc, ref msg));
            }
            catch (Exception e)
            {
                msg = e.Message;
                return(false);
            }
            //return true;
        }
Пример #2
0
        bool getXmlDataSet(XmlDocument xmldoc, XmlSchemaClass xmlSchema, ref XmlDocument retDoc, ref string msg)
        {
            if (xmlSchema == null)
            {
                retDoc = xmldoc;
            }
            retDoc = new XmlDocument();
            Dictionary <string, TableGuider> tablist = xmlSchema.TableList;

            retDoc.LoadXml("<NewDataSet/>");
            if (xmldoc == null)
            {
                return(false);
            }
            try
            {
                if (tablist.Count == 0)
                {
                    msg = "未指定指引配置!";
                    return(false);
                }
                TableGuider tg = tablist.First().Value;
                if (tg == null)
                {
                    msg = "未配置表结构!";
                    return(false);
                }
                List <TableGuider> subtabs  = tablist.Values.Skip(1).ToList();
                string             mainname = tg.TableName;
                XmlNode            rootnode = retDoc.SelectSingleNode("NewDataSet");
                if (string.IsNullOrEmpty(mainname))
                {
                    msg = "指定指引中主表名未配置!";
                    return(false);
                }
                XmlNamespaceManager xmlm = new XmlNamespaceManager(xmldoc.NameTable);
                xmlm.AddNamespace("json", "http://james.newtonking.com/projects/json");//添加命名空间
                XmlNode     root      = xmldoc.SelectSingleNode(tg.rootNodePath);
                XmlNodeList itemnodes = root.SelectNodes(tg.dataItemName);
                string      message   = XmlUtil.GetSubNodeText(root, tg.msgItemName);
                if (!string.IsNullOrEmpty(message))
                {
                    if (message.Trim() != "success" && message.Trim() != "接口成功")
                    {
                        msg = message;
                        return(false);
                    }
                }
                foreach (XmlNode dataNode in itemnodes)
                {
                    string submsg = null;
                    if (XmlUtil.GetSubNodeText(itemnodes[0], tg.msgItemName) != "" && XmlUtil.GetSubNodeText(dataNode, tg.msgItemName) != "0")
                    {
                        submsg = XmlUtil.GetSubNodeText(dataNode, tg.msgItemName);
                        msg    = submsg;
                        return(false);
                    }

                    //XmlNode NewRow = xmldoc.CreateElement(mainname, xmlm.LookupNamespace("json"));
                    XmlNode NewRow = retDoc.CreateElement(mainname);
                    //XmlAttribute att = xmldoc.CreateAttribute("json:Array", xmlm.LookupNamespace("json"));
                    //att.Value = "true";
                    //NewRow.Attributes.Append(att);
                    string tableKey = tg.Key;
                    string keyValue = null;
                    if (tg.Columns.Count > 0)
                    {
                        foreach (string key in tg.Columns.Keys)
                        {
                            ResponseDataColumn rdc      = tg.Columns[key];
                            XmlNode            cellNode = retDoc.CreateElement(key);
                            if (!rdc.outXml)
                            {
                                cellNode.InnerText = XmlUtil.GetSubNodeText(dataNode, rdc.xPath);
                            }
                            else
                            {
                                //System.Web.HttpUtility.UrlEncode
                                string strOutXml = HttpUtility.HtmlEncode(dataNode.SelectSingleNode(rdc.xPath)?.OuterXml);
                                cellNode.InnerXml = strOutXml;
                            }
                            if (key == tableKey)
                            {
                                keyValue = cellNode.InnerText;
                            }
                            NewRow.AppendChild(cellNode);
                        }
                    }

                    rootnode.AppendChild(NewRow);
                    for (int i = 0; i < subtabs.Count; i++)
                    {
                        TableGuider stg        = subtabs[i];
                        string      sItemPath  = string.Format("{0}/{1}", stg.rootNodePath, stg.dataItemName);
                        XmlNodeList sDataNodes = dataNode.SelectNodes(sItemPath);
                        if (sDataNodes.Count == 0)
                        {
                            continue;
                        }
                        XmlNode subTableRow = retDoc.CreateElement(stg.TableName);
                        foreach (XmlNode sitem in sDataNodes)
                        {
                            if (stg.Columns.Count > 0)
                            {
                                bool ExistKey     = false;
                                bool ExistKeyItem = false;
                                foreach (string key in stg.Columns.Keys)
                                {
                                    ResponseDataColumn rdc      = stg.Columns[key];
                                    XmlNode            cellNode = retDoc.CreateElement(key);
                                    if (!rdc.outXml)
                                    {
                                        cellNode.InnerText = XmlUtil.GetSubNodeText(dataNode, rdc.xPath);
                                    }
                                    else
                                    {
                                        cellNode.InnerXml = XmlUtil.GetSubNodeXml(dataNode, rdc.xPath);
                                    }
                                    subTableRow.AppendChild(cellNode);
                                    if (key == tableKey)
                                    {
                                        ExistKeyItem = true;
                                        if (cellNode.InnerText == keyValue)
                                        {
                                            ExistKey = true;
                                        }
                                    }
                                }
                                XmlNode keyNode = null;
                                if (ExistKeyItem)  //存在键项
                                {
                                    if (!ExistKey) //存在同名键,另外新建一个表名_健名,如果虚拟键恰巧存在就通过修改表名避免
                                    {
                                        string  parentKey      = string.Format("{0}_{1}", tg.TableName, tableKey);
                                        XmlNode virtualKeyNode = retDoc.CreateElement(parentKey);
                                        virtualKeyNode.InnerText = keyValue;
                                        subTableRow.AppendChild(virtualKeyNode);
                                    }
                                }
                                else //没有存在键相,直接插入一个
                                {
                                    keyNode           = retDoc.CreateElement(tableKey);
                                    keyNode.InnerText = keyValue;
                                    subTableRow.AppendChild(keyNode);
                                }
                            }
                        }
                        rootnode.AppendChild(subTableRow);
                    }
                }
                return(true);
            }
            catch (Exception ce)
            {
                msg = string.Format("{0}[{1}]", ce.Message, ce.StackTrace);
                return(false);
            }
        }
Пример #3
0
        public virtual bool getBusynessXmlData(XmlNode condition, ref XmlDocument retdoc, ref XmlDocument xmlschemaDoc, ref string msg, bool onlyFirstPage = true, bool onlyOrgData = false)
        {
            if (condition == null)
            {
                return(getXmlData(ref retdoc, ref xmlschemaDoc, ref msg, onlyFirstPage, onlyOrgData));
            }
            //c[@i @f @r @v @o @s]
            try
            {
                XmlNodeList nodes   = condition.SelectNodes("c[@o!='in']");
                XmlNodeList inNodes = condition.SelectNodes("req/c[@o='in']");
                if (inNodes.Count > 1)
                {
                    msg = "不支持多个内含条件!";
                    return(false);
                }
                string forName = XmlUtil.GetSubNodeText(inNodes[0], "@i");
                string vals    = XmlUtil.GetSubNodeText(inNodes[0], "@v");
                string sp      = XmlUtil.GetSubNodeText(inNodes[0], "@s");
                if (string.IsNullOrEmpty(sp))//默认用,分割
                {
                    sp = ",";
                }
                if (inNodes.Count > 0 && (string.IsNullOrEmpty(forName) || string.IsNullOrEmpty(vals)))
                {
                    msg = "内含条件名称和值不能为空!";
                    return(false);
                }
                XmlSchemaClass schema      = null;
                XmlNode        rootNode    = null;
                string         strRootName = "NewDataSet";
                string[]       arr         = vals.Split(sp.ToCharArray());
                for (int i = 0; i < arr.Length; i++)
                {
                    if (string.IsNullOrEmpty(forName) == false)
                    {
                        setBussiessItems(forName, arr[i]);
                    }
                    foreach (XmlNode node in nodes)
                    {
                        string pointName = XmlUtil.GetSubNodeText(node, "@i");
                        string opt       = XmlUtil.GetSubNodeText(node, "@o");
                        string val       = XmlUtil.GetSubNodeText(node, "@v");
                        if (string.IsNullOrEmpty(pointName) || string.IsNullOrEmpty(val))
                        {
                            continue;
                        }
                        if (string.IsNullOrEmpty(opt))
                        {
                            opt = "=";
                        }
                        if (opt == "=")
                        {
                            setBussiessItems(pointName, val);
                        }
                    }
                    XmlDocument xmldoc    = null;
                    XmlDocument xmlschema = null;
                    bool        succ      = getXmlData(ref xmldoc, ref xmlschema, ref msg, false);
                    if (succ == false)
                    {
                        if (msg != null)
                        {
                        }
                        continue;
                    }
                    if (schema == null)
                    {
                        schema       = new XmlSchemaClass(xmlschema);
                        xmlschemaDoc = xmlschema;
                    }
                    if (retdoc == null)
                    {
                        retdoc   = xmldoc;
                        rootNode = retdoc.SelectSingleNode(strRootName);
                    }
                    else //把新的节点全部复制过去
                    {
                        foreach (string key in schema.TableList.Keys)
                        {
                            string xpath = string.Format("{0}/{1}", strRootName, key);
                            foreach (XmlNode node in xmldoc.SelectNodes(xpath))
                            {
                                rootNode.AppendChild(retdoc.ImportNode(node, true));
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                msg = e.Message;
                return(false);
            }

            return(true);
        }