• 读取pdm格式的文件生成json数据对象,拼接字符串的笨方法[实质是读取xml文件生成json数据对象]


    1.首先从这个pdm文件文件中抽出xml的"一张表":

    <?xml version="1.0" encoding="gb2312"?>

    <Model xmlns:a="attribute" xmlns:c="collection" xmlns:o="object">
      <o:Table Id="o6">
        <a:ObjectID>4305BC1B-3526-4E12-8C6C-C1BF0F5C59D2</a:ObjectID>
        <a:Name>模板</a:Name>
        <a:Code>CMS_TEMP</a:Code>
        <a:CreationDate>1332832430</a:CreationDate>
        <a:Creator>Administrator</a:Creator>
        <a:ModificationDate>1348554434</a:ModificationDate>
        <a:Modifier>Administrator</a:Modifier>
        <a:TotalSavingCurrency/>
        <c:Columns>
         
          <o:Column Id="o33">
            <a:ObjectID>F38BE5C1-7917-46CE-8FD6-33E625869DAA</a:ObjectID>
            <a:Name>内码</a:Name>
            <a:Code>PK_ID</a:Code>
            <a:CreationDate>1332832430</a:CreationDate>
            <a:Creator>Administrator</a:Creator>
            <a:ModificationDate>1332837878</a:ModificationDate>
            <a:Modifier>Administrator</a:Modifier>
            <a:DataType>panint</a:DataType>
            <a:Mandatory>1</a:Mandatory>
          </o:Column>
          <o:Column Id="o34">
            <a:ObjectID>E4999851-9628-4317-A740-74BA62CE8788</a:ObjectID>
            <a:Name>编号</a:Name>
            <a:Code>TEMP_NO</a:Code>
            <a:CreationDate>1332832430</a:CreationDate>
            <a:Creator>Administrator</a:Creator>
            <a:ModificationDate>1332837334</a:ModificationDate>
            <a:Modifier>Administrator</a:Modifier>
            <a:DataType>panvarchar(50)</a:DataType>
            <a:Length>50</a:Length>
          </o:Column>
          <o:Column Id="o35">
            <a:ObjectID>58139FAE-C9F1-477C-B261-2B8D53EAF1DF</a:ObjectID>
            <a:Name>名称</a:Name>
            <a:Code>TEMP_NAME</a:Code>
            <a:CreationDate>1332832430</a:CreationDate>
            <a:Creator>Administrator</a:Creator>
            <a:ModificationDate>1332837334</a:ModificationDate>
            <a:Modifier>Administrator</a:Modifier>
            <a:DataType>panvarchar(50)</a:DataType>
            <a:Length>50</a:Length>
          </o:Column>
          <o:Column Id="o36">
            <a:ObjectID>0FD8A3F9-A5C5-4794-B1EB-2DF835BA4C51</a:ObjectID>
            <a:Name>类型</a:Name>
            <a:Code>FK_TEMP_TYPE</a:Code>
            <a:CreationDate>1332832430</a:CreationDate>
            <a:Creator>Administrator</a:Creator>
            <a:ModificationDate>1332837878</a:ModificationDate>
            <a:Modifier>Administrator</a:Modifier>
            <a:DataType>panint</a:DataType>
          </o:Column>
          <o:Column Id="o37">
            <a:ObjectID>AEF02063-FBBB-4E24-A9C1-DE92DB7C9FB2</a:ObjectID>
            <a:Name>内容</a:Name>
            <a:Code>TEMP_CONTENT</a:Code>
            <a:CreationDate>1332832430</a:CreationDate>
            <a:Creator>Administrator</a:Creator>
            <a:ModificationDate>1332833706</a:ModificationDate>
            <a:Modifier>Administrator</a:Modifier>
            <a:DataType>pantext</a:DataType>
          </o:Column>
          <o:Column Id="o38">
            <a:ObjectID>1398C477-2E7A-4793-BAB9-6B907462FD08</a:ObjectID>
            <a:Name>日期</a:Name>
            <a:Code>TEMP_TIME</a:Code>
            <a:CreationDate>1332832430</a:CreationDate>
            <a:Creator>Administrator</a:Creator>
            <a:ModificationDate>1332833706</a:ModificationDate>
            <a:Modifier>Administrator</a:Modifier>
            <a:DataType>pandate</a:DataType>
          </o:Column>
          <o:Column Id="o39">
            <a:ObjectID>F31AD368-FF19-42A3-A668-EF14CBBCF38C</a:ObjectID>
            <a:Name>备注</a:Name>
            <a:Code>TEMP_NOTE</a:Code>
            <a:CreationDate>1348554342</a:CreationDate>
            <a:Creator>Administrator</a:Creator>
            <a:ModificationDate>1348554434</a:ModificationDate>
            <a:Modifier>Administrator</a:Modifier>
            <a:DataType>panvarchar(100)</a:DataType>
            <a:Length>100</a:Length>
          </o:Column>
         
        </c:Columns>
        <c:Keys>
          <o:Key Id="o40">
            <a:ObjectID>5C4F7786-029E-41E7-842A-64DDA2BA8CA9</a:ObjectID>
            <a:Name>PK_CMS_TEMP</a:Name>
            <a:Code>PK_CMS_TEMP</a:Code>
            <a:CreationDate>1332832430</a:CreationDate>
            <a:Creator>Administrator</a:Creator>
            <a:ModificationDate>1332836773</a:ModificationDate>
            <a:Modifier>Administrator</a:Modifier>
            <c:Key.Columns>
              <o:Column Ref="o33"/>
            </c:Key.Columns>
          </o:Key>
        </c:Keys>
        <c:PrimaryKey>
          <o:Key Ref="o40"/>
        </c:PrimaryKey>
        <c:ClusterObject>
          <o:Key Ref="o40"/>
        </c:ClusterObject>
      </o:Table>
    </Model>

    2.下面是读取这张xml格式"表格"的方法:

    /// <summary>

            /// From A Table Generate  JSON Objects

            /// </summary>

            /// <returns></returns>

            public string GenerateJSON(XmlNode ATable, XmlNamespaceManager xmlnsManager)

            {

                XmlNode name = ATable.SelectSingleNode("a:Name", xmlnsManager);

                XmlNode TrueName = ATable.SelectSingleNode("a:Code", xmlnsManager);

                string TName = string.Empty;

                if (name != null)

                {

                    TName += "{Name:\"" + TrueName.InnerText + "\",";//表名称

                    TName += "Title:\"" + name.InnerText + "\",";

                    //Response.Write(TName);

                }

                //XmlNodeList columns = ATable.SelectSingleNode("c:Columns", xmlnsManager).ChildNodes;//1

                XmlNodeList columns = ATable.SelectNodes("c:Columns/o:Column", xmlnsManager);//1

                StringBuilder builder = new StringBuilder();

                builder.Append("[");

                //循环多列

                foreach (XmlNode nodeColumn in columns)

                {

                    //Response.Write("<script>alert('" +  + "')</script>");

                    string nodeColumnName = nodeColumn.SelectSingleNode("a:Name", xmlnsManager).InnerText;

                    string TrueNodeColumnName = nodeColumn.SelectSingleNode("a:Code", xmlnsManager).InnerText;

                    string nodeColumnType = nodeColumn.SelectSingleNode("a:DataType", xmlnsManager).InnerText;

                    XmlNode nodeLength = nodeColumn.SelectSingleNode("a:Length", xmlnsManager);

                    string nodeColumnlength = string.Empty;

                    int ZERO = 0;

                    if (nodeLength != null)

                    {

                        nodeColumnlength = nodeColumn.SelectSingleNode("a:Length", xmlnsManager).InnerText;

                    }

                    else

                    {

                        nodeColumnlength = ZERO.ToString();

                    }

                    //convert  the builder.ToString(); 为ajson

                    builder.Append("{Name:\"" + TrueNodeColumnName + "\",Title:\"" + nodeColumnName + "\",Type:\"" + nodeColumnType + "\",Length:" + nodeColumnlength + "},");

                }

                builder.Append("]");

                string resStr = "Column:" + builder.ToString().Remove(builder.Length - 2, 1);

                resStr += ",";//生成队列信息 

     

                #region 下面是找主键信息

                XmlNode PrimaryKeyNode = ATable.SelectSingleNode("//c:PrimaryKey/o:Key", xmlnsManager);//2

                string PrimaryKeyID = string.Empty;

                if (PrimaryKeyNode != null)

                    PrimaryKeyID = PrimaryKeyNode.Attributes["Ref"].Value;

                else return "";//未能找到xml的主键信息列

                // Response.Write(PrimaryKeyID);

                XmlNode nodeAtt = ATable.SelectSingleNode("//c:Keys/o:Key[@Id='" + PrimaryKeyID + "']", xmlnsManager);//3

                string primaryName = nodeAtt.SelectSingleNode("a:Name", xmlnsManager).InnerText;//主键信息

                //Response.Write(primaryName);

                XmlNode xmlAttID = nodeAtt.SelectSingleNode("c:Key.Columns/o:Column", xmlnsManager);//主键信息

                string xmlPrimaryId = xmlAttID.Attributes["Ref"].Value;//主键信息

                //Response.Write(xmlPrimaryId);

                XmlNode xmlNodePrimary = ATable.SelectSingleNode("//c:Columns/o:Column[@Id='" + xmlPrimaryId + "']", xmlnsManager);//4

                string xmlNodePrimaryName = xmlNodePrimary.SelectSingleNode("a:Code", xmlnsManager).InnerText;////主键信息名字

                string xmlPrimaryNameMain = "PrimaryKey:\"" + xmlNodePrimaryName + "\",";//string:primaryString json格式对象

                //Response.Write(xmlPrimaryNameMain);

                string xmlIdx = "idx:\"" + xmlNodePrimaryName + "\"}";

                return TName + resStr + xmlPrimaryNameMain + xmlIdx;

                #endregion

            }

    3.循环pdm文件中的多个xml"表格",动态代码如下:

            /// <summary>

            /// 多张表生成json格式对象

            /// </summary>

            /// <returns></returns>

            public string ForeachTable()

            {

                string resJSON = string.Empty;

                XmlDocument xmldoc = new XmlDocument();

                XmlNamespaceManager xmlnsManager = new XmlNamespaceManager(xmldoc.NameTable);

                xmlnsManager.AddNamespace("a", "attribute");

                xmlnsManager.AddNamespace("c", "collection");

                xmlnsManager.AddNamespace("o", "object");

                xmldoc.Load(Server.MapPath("~/bin/cms.pdm"));

                XmlElement root = xmldoc.DocumentElement;

                if (root == null)

                    return "";

                //对个节点集合

                XmlNodeList MultipleTable = root.SelectNodes("//Model/o:RootObject/c:Children/o:Model/c:Tables/o:Table", xmlnsManager);

                resJSON += "[";

                foreach (XmlNode table in MultipleTable)

                {

                    resJSON += GenerateJSON(table, xmlnsManager) + ",";

                }

                resJSON += "]";

                resJSON.Remove(resJSON.Length - 2, 1);

                return resJSON;

            }

    4.拼接字符串是一种方法,但是比较麻烦,所以还可以用到Dictionary和List泛型集合集成数据,既可以序列化成json格式数据的对象!

      下面是用一般处理程序下的泛型集合改的:

    <%@ WebHandler Language="C#" Class="Handler" %>

    using System;
    using System.Web;
    using System.Collections;
    using System.Web.Script.Serialization;
    using System.IO;
    using Microsoft.SqlServer;
    using System.Collections.Generic;
    using System.Xml;

    public class Handler : IHttpHandler
    {

    public void ProcessRequest(HttpContext context)
    {
    context.Response.ContentType = "text/plain";

    JavaScriptSerializer js = new JavaScriptSerializer();
    List<Dictionary<string, object>> list = new List<Dictionary<string, object>>();
    list = ForeachTable();
    string jsonMultipleTable = js.Serialize(list);
    context.Response.Write(jsonMultipleTable);
    context.Response.Write("<br />");
    }
    /// <summary>
    /// 负责调用该方法,生成json对象
    /// </summary>
    /// <returns></returns
    public List<Dictionary<string, object>> ForeachTable()
    {
    string resJSON = string.Empty;
    List<System.Collections.Generic.Dictionary<string, object>> listMultipleTalbe = new List<Dictionary<string, object>>();
    XmlDocument xmldoc = new XmlDocument();
    System.Xml.XmlNamespaceManager xmlnsManager = new System.Xml.XmlNamespaceManager(xmldoc.NameTable);
    xmlnsManager.AddNamespace("a", "attribute");
    xmlnsManager.AddNamespace("c", "collection");
    xmlnsManager.AddNamespace("o", "object");
    xmldoc.Load(HttpContext.Current.Request.MapPath("~/file/cms.pdm"));
    XmlElement root = xmldoc.DocumentElement;
    if (root == null)
    return null;
    //
    XmlNodeList MultipleTable = root.SelectNodes("//Model/o:RootObject/c:Children/o:Model/c:Tables/o:Table", xmlnsManager);
    foreach (XmlNode table in MultipleTable)
    {
    listMultipleTalbe.Add(GenerateJSON(table, xmlnsManager));
    }
    return listMultipleTalbe;
    }
    /// <summary>
    /// From A Table Generate JSON Objects
    /// </summary>
    /// <returns></returns>
    public Dictionary<string, object> GenerateJSON(XmlNode ATable, XmlNamespaceManager xmlnsManager)
    {
    Dictionary<string, object> DicTable = new Dictionary<string, object>();//a table
    List<Dictionary<string, string>> listColumn = new List<Dictionary<string, string>>();//multiple column
    Dictionary<string, string> DicMultipleColumn = null;//a column
    XmlNode name = ATable.SelectSingleNode("a:Name", xmlnsManager);
    XmlNode TrueName = ATable.SelectSingleNode("a:Code", xmlnsManager);
    string TName = string.Empty;
    if (name != null)
    {
    DicTable.Add("Name", TrueName.InnerText);
    DicTable.Add("Title", name.InnerText);
    }
    XmlNodeList columns = ATable.SelectNodes("c:Columns/o:Column", xmlnsManager);//1
    //循环多列
    foreach (XmlNode nodeColumn in columns)
    {
    string nodeColumnName = nodeColumn.SelectSingleNode("a:Name", xmlnsManager).InnerText;
    string TrueNodeColumnName = nodeColumn.SelectSingleNode("a:Code", xmlnsManager).InnerText;
    string nodeColumnType = nodeColumn.SelectSingleNode("a:DataType", xmlnsManager).InnerText;
    XmlNode nodeLength = nodeColumn.SelectSingleNode("a:Length", xmlnsManager);
    string nodeColumnlength = string.Empty;
    int ZERO = 0;
    if (nodeLength != null)
    {
    nodeColumnlength = nodeColumn.SelectSingleNode("a:Length", xmlnsManager).InnerText;
    }
    else
    {
    nodeColumnlength = ZERO.ToString();
    }
    // DicMultipleColumn.Clear();
    //每一列对应的new一个新dictionary
    DicMultipleColumn = new Dictionary<string, string>();
    DicMultipleColumn.Add("Name", TrueNodeColumnName);
    DicMultipleColumn.Add("Title", nodeColumnName);
    DicMultipleColumn.Add("Type", nodeColumnType);
    DicMultipleColumn.Add("Length", nodeColumnlength);
    listColumn.Add(DicMultipleColumn);
    }
    DicTable.Add("Column", listColumn);
    XmlNode PrimaryKeyNode = ATable.SelectSingleNode("//c:PrimaryKey/o:Key", xmlnsManager);//2
    string PrimaryKeyID = string.Empty;//找到主键Ref
    if (PrimaryKeyNode != null)
    PrimaryKeyID = PrimaryKeyNode.Attributes["Ref"].Value;
    else return null;//未能找到PrimaryKey
    XmlNode nodeAtt = ATable.SelectSingleNode("//c:Keys/o:Key[@Id='" + PrimaryKeyID + "']", xmlnsManager);//3
    string primaryName = nodeAtt.SelectSingleNode("a:Name", xmlnsManager).InnerText;//主键名字;
    XmlNode xmlAttID = nodeAtt.SelectSingleNode("c:Key.Columns/o:Column", xmlnsManager);//主键名字
    string xmlPrimaryId = xmlAttID.Attributes["Ref"].Value;//主键id
    XmlNode xmlNodePrimary = ATable.SelectSingleNode("//c:Columns/o:Column[@Id='" + xmlPrimaryId + "']", xmlnsManager);//4
    string xmlNodePrimaryName = xmlNodePrimary.SelectSingleNode("a:Code", xmlnsManager).InnerText;//主键的名字
    DicTable.Add("PrimaryKey", xmlNodePrimaryName);
    DicTable.Add("idx", xmlNodePrimaryName);
    return DicTable;

    }
    public bool IsReusable
    {
    get
    {
    return false;
    }
    }

    }

     

    5.如上只是一种思想,希望各位指正!

     

     

  • 相关阅读:
    PCB工作台
    A/D转换
    gerber文件生成与PCB3D视图
    软考考前冲刺第十四、十五章算法设计与面向对象程序设计
    数据库之范式
    Java第九天
    软考考前冲刺第十三章UML建模
    软考错题合集之16-05-AM
    Java第八天
    Java第七天
  • 原文地址:https://www.cnblogs.com/LpRightNow/p/2821257.html
Copyright © 2020-2023  润新知