• XML配置silverlight ,wcf 解析xml


    XML 代码: 

    <?xml version="1.0" encoding="utf-8" ?>
    <ChartSet  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instancexsi:noNamespaceSchemaLocation="../ChartSchema.xsd">
      <Chart Title="XXXXXXX情况" ChartType="Line">
        <AxisX Title="" XField="rq"></AxisX>
        <AxisY Title="" Unit="次数" UnitT="符合率(%)">
          <YChild Name="事故预报" Color="Blue" XField="rq" YField="BNYBHJ"/>

          <YChild Name="{Year}" Color="Blue" XField="rq" YField="BENYEAR"/>
          <YChild Name="预报准确" Color="Orange" XField="rq" YField="BNYBZQ"/>
          <YChild Name="预报符合率" Color="Orange" XField="rq" YField="BNYBFHL" TWOY="true"/>
        </AxisY>
        <Command XField="rq" YFields="BNYBHJ,BNYBZQ,BNYBFHL">
          <CommandText>
            <![CDATA[
                        select
                       t.bnybhj as BNYBHJ,
                       t.bnybfh as BNYBZQ,
                       t.bnybfhl as BNYBFHL,

            t.bnybfhl as BENYEAR,
                       substr(t.reportdate, 0, 4) || '年' as rq
                        from  table  t
                        where t.reportdate between '{strBeginRepordate}' and '{Reportdate}'

                       and t.name='{Name}'
                       order by t.reportdate
              
              
              
            ]]>
          </CommandText>
        </Command>
      </Chart>
    </ChartSet>

    XML文件 与  ChartSchema.xsd 文件在一个文件夹下

    XML文件标签引用于 xsi:noNamespaceSchemaLocation="../ChartSchema.xsd">

    标签:ChartSet  Chart Command  CommandText  XField  YFields  AxisY  AxisX  Title  …… ……

    ChartSchema.xsd 代码如下:

    <?xml version="1.0" encoding="utf-8"?>
    <xs:schema id="ChartSchema" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">

      <!--图表集-->
      <xs:element name="ChartSet">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="Chart" maxOccurs="unbounded" minOccurs="1" />
          </xs:sequence>
          <xs:attribute name="GroupID" type="xs:int" />
          <xs:attribute name="GroupName" type="xs:string" />
        </xs:complexType>
      </xs:element>

      <!--图表-->
      <xs:element name="Chart">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="AxisX" maxOccurs="1" minOccurs="1" />
            <xs:element ref="AxisY" minOccurs="1" />
            <xs:element ref="Command" maxOccurs="1" minOccurs="1"/>
          </xs:sequence>
          <xs:attribute name ="Title" type="xs:string"></xs:attribute>
          <xs:attribute name ="ChartType">
            <xs:simpleType>
              <xs:restriction base="xs:string">
                <!--折线图-->
                <xs:enumeration value="Line" />
                <!--柱状图-->
                <xs:enumeration value="Column" />
                <!--饼图-->
                <xs:enumeration value="Pie" />
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
        </xs:complexType>
      </xs:element>

      <xs:element name="AxisX">
        <xs:complexType>
          <xs:attribute name="Title" type="xs:string"></xs:attribute>
          <xs:attribute name="XField" type="xs:string"></xs:attribute>
        </xs:complexType>
      </xs:element>

      <xs:element name="AxisY">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="YChild" maxOccurs="unbounded" minOccurs="1" />
          </xs:sequence>
          <xs:attribute name="Title" type="xs:string"></xs:attribute>
          <xs:attribute name="Unit" type="xs:string"></xs:attribute>
          <xs:attribute name="UnitT" type="xs:string"></xs:attribute>
        </xs:complexType>
      </xs:element>

      <!--数据访问命令-->
      <xs:element name="Command">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="CommandText" type="xs:string"></xs:element>
          </xs:sequence>
          <xs:attribute name="XField" type="xs:string" />
          <xs:attribute name="YFields" type="xs:string" />
        </xs:complexType>
      </xs:element>

      <!--图表序列(即图表数据对象)-->
      <xs:element name="YChild">
        <xs:complexType>
          <xs:attribute name="Name" type="xs:string" />
          <xs:attribute name="XField" type="xs:string" />
          <xs:attribute name="YField" type="xs:string" />
          <xs:attribute name="TWOY" type="xs:boolean" />
          <xs:attribute name="Color">
            <xs:simpleType>
              <xs:restriction base="xs:string">
                <xs:enumeration value="Red" />
                <xs:enumeration value="Green" />
                <xs:enumeration value="Yellow" />
                <xs:enumeration value="Blue" />
                <xs:enumeration value="Orange" />
                <xs:enumeration value="Navy" />
                <xs:enumeration value="Chocolate" />
                <xs:enumeration value="Black" />
                <xs:enumeration value="Pink" />
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
        </xs:complexType>
      </xs:element>

    </xs:schema>

     WCF 解析xml 文件方法 如下:

        private ListItem AnalyzeXML(string XMLCode, string Reportdate, string ChartName, string OildomName)
            {
                IDataBase oDB = DBFactory.GetDBInstance();
                ListItem liChart = new ListItem();
                XmlDocument config;
                string basePath = System.AppDomain.CurrentDomain.BaseDirectory + "Silverlight\Config\SCYX\";
                string configPath = basePath + XMLCode;
                if (!System.IO.File.Exists(configPath))
                {
                    throw new Exception("指定配置文件不存在!");
                }
                config = new XmlDocument();
                config.Load(configPath);

                XmlNode rootNode = config.SelectSingleNode("/ChartSet");
                if (rootNode == null)
                {
                    throw new Exception("图集合的配置不存在!");
                }
                for (int i = 0; i < rootNode.ChildNodes.Count; i++)
                {
                    try
                    {
                        DataTable dt;
                        XmlNode ChartNode = rootNode.ChildNodes[i];
                        if (ChartNode == null)
                        {
                            throw new Exception("图的配置不存在!");
                        }
                        #region 获取Chart基本信息
                        if (ChartNode == null)
                        {
                            throw new Exception("图的配置不存在!");
                        }
                        liChart.ChartName = ChartName;
                        liChart.Title = ChartNode.Attributes["Title"].Value;
                        liChart.Title = liChart.Title.Replace("{Date}", Reportdate);
                        liChart.Title = liChart.Title.Replace("{Name}", OildomName);
                        liChart.ChartType = ChartNode.Attributes["ChartType"].Value;
                        #endregion

                        #region 获取Command信息
                        XmlNode xnCommand = ChartNode.SelectSingleNode("Command");
                        string sSQL = "";
                        if (xnCommand == null && xnCommand.ChildNodes.Count == 0)
                        {
                            throw new Exception("未找到配置数据SQL");
                        }
                        else
                        {
                            // string strBeginRepordate = Reportdate.Substring(0, 6) + "01";//月初
                            //string strEndRepordate = DateTime.ParseExact(strBeginRepordate, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture).AddMonths(1).AddDays(-1).ToString("yyyyMMdd");//月末
                            string strBeginRepordate = DateTime.ParseExact(Reportdate, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture).AddMonths(-1).ToString("yyyyMMdd");//当前日期前一个月
                            sSQL = (xnCommand.ChildNodes[0]).InnerText;
                            sSQL = sSQL.Replace("{Reportdate}", Reportdate);
                            sSQL = sSQL.Replace("{strBeginRepordate}", strBeginRepordate);
                            sSQL = sSQL.Replace("{Name}", OildomName);
                            dt = oDB.GetDataTable(sSQL);
                        }
                        #endregion

                        #region 获取AxisX信息
                        XmlNode xnAxisX = ChartNode.SelectSingleNode("AxisX");
                        string[] sXAXIS = new string[dt.Rows.Count];
                        for (int h = 0; h < dt.Rows.Count; h++)
                        {
                            sXAXIS[h] = dt.Rows[h][xnAxisX.Attributes["XField"].Value].ToString();
                        }
                        liChart.XAXIS = sXAXIS;
                        #endregion

                        #region 获取AxisY信息
                        XmlNode xnAxisY = ChartNode.SelectSingleNode("AxisY");
                        if (xnAxisY.Attributes["Unit"] != null)
                            liChart.YUint = xnAxisY.Attributes["Unit"].Value;
                        string strYear = Reportdate.Substring(0, 4);//本年
                        string strBegReportDate = DateTime.ParseExact(Reportdate, "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture).AddYears(-1).ToString("yyyyMMdd").Substring(0, 4);//上一年
                        for (int j = 0; j < xnAxisY.ChildNodes.Count; j++)
                        {
                            XmlNode xnYChild = xnAxisY.ChildNodes[j];
                            YAXIS oYAXIS = new YAXIS();
                            oYAXIS.Name = xnYChild.Attributes["Name"].Value;
                            oYAXIS.Name = oYAXIS.Name.Replace("{Year-1}", strBegReportDate);
                            oYAXIS.Name = oYAXIS.Name.Replace("{Year}", strYear);
                            oYAXIS.Color = xnYChild.Attributes["Color"].Value;
                            oYAXIS.XField = xnYChild.Attributes["XField"].Value;
                            oYAXIS.YField = xnYChild.Attributes["YField"].Value;
                            double[] sYAXIS = new double[dt.Rows.Count];
                            for (int k = 0; k < dt.Rows.Count; k++)
                            {
                                sYAXIS[k] = Convert.ToDouble(dt.Rows[k][oYAXIS.YField]);
                            }
                            oYAXIS.YValue = sYAXIS;
                            liChart.YAXISs.Add(oYAXIS);
                        }
                        #endregion
                    }
                    catch (Exception e)
                    {
                        throw new Exception("获取配置文件失败!" + e.Message);
                    }
                }

                return liChart;
            }

  • 相关阅读:
    hdu 4947
    hdu 4946
    hdu 4944
    hdu 4942
    hdu 4941
    PAT 【L2-011 玩转二叉树】
    PAT【L2-006 树的遍历】
    XYNUOJ 【2070: 重建二叉树】
    XYNUOJ 【1367: 二叉链表存储的二叉树】
    XYNUOJ 2390【二叉树遍历2】
  • 原文地址:https://www.cnblogs.com/xuxin-1989/p/3695936.html
Copyright © 2020-2023  润新知