Ejemplo n.º 1
0
        public void LoadXml(XmlNode node)
        {
            TableName  = XmlUtil.GetSubNodeText(node, "@Name");
            Key        = XmlUtil.GetSubNodeText(node, "@MainKey");
            NextRef    = XmlUtil.GetSubNodeText(node, "@MainRef");
            KeySplitor = XmlUtil.GetSubNodeText(node, "@Split");
            string _tmp = XmlUtil.GetSubNodeText(node, "@rootNodePath");

            if (!string.IsNullOrEmpty(_tmp))
            {
                rootNodePath = _tmp;
            }
            _tmp = XmlUtil.GetSubNodeText(node, "@dataItemName");
            if (!string.IsNullOrEmpty(_tmp))
            {
                dataItemName = _tmp;
            }
            _tmp = XmlUtil.GetSubNodeText(node, "@codeItemName");
            if (!string.IsNullOrEmpty(_tmp))
            {
                codeItemName = _tmp;
            }
            _tmp = XmlUtil.GetSubNodeText(node, "@msgItemName");
            if (!string.IsNullOrEmpty(_tmp))
            {
                msgItemName = _tmp;
            }
            XmlNodeList colNodes = node.SelectNodes("Columns/Col");

            if (colNodes.Count == 0)
            {
                return;
            }
            Columns = new Dictionary <string, ResponseDataColumn>();
            foreach (XmlNode colNode in colNodes)
            {
                string strColName = XmlUtil.GetSubNodeText(colNode, "@name");
                if (Columns.ContainsKey(strColName))
                {
                    continue;
                }
                ResponseDataColumn jdc = new ResponseDataColumn();
                jdc.name     = strColName;
                jdc.format   = XmlUtil.GetSubNodeText(colNode, "@format");
                jdc.xPath    = XmlUtil.GetSubNodeText(colNode, "@xPath");
                jdc.dataType = XmlUtil.GetSubNodeText(colNode, "@dataType");
                string outXml = XmlUtil.GetSubNodeText(colNode, "@outXml");
                if (!string.IsNullOrEmpty(outXml) && (outXml == "1" || outXml.Trim().ToLower() == "true"))
                {
                    jdc.outXml = true;
                }
                Columns.Add(jdc.name, jdc);
            }
        }
Ejemplo n.º 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);
            }
        }