XML 代码:

<?xml version="1.0" encoding="utf-8" ?>
<ChartSet  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi: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;
        }

XML配置silverlight ,wcf 解析xml的更多相关文章

  1. Spring的配置文件ApplicationContext.xml配置头文件解析

    Spring的配置文件ApplicationContext.xml配置头文件解析 原创 2016年12月16日 14:22:43 标签: spring配置文件 5446 spring中的applica ...

  2. python XML文件解析:用xml.dom.minidom来解析xml文件

    python解析XML常见的有三种方法: 一是xml.dom.*模块,是W3C DOM API的实现,若需要处理DOM API则该模块很合适, 二是xml.sax.*模块,它是SAX API的实现,这 ...

  3. Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件,封装函数

    总结了一下使用Python对xml文件的解析,用到的模块儿如下: 分别从xml字符串和xml文件转换为xml对象,然后解析xml内容,查询指定信息字段. from xml.dom.minidom im ...

  4. Java解析XML文档——dom解析xml

    一.前言 用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object M ...

  5. CSS控制XML与通过js解析xml然后通过html显示xml中的数据

    使用CSS控制XML的显示 book.css bookname{ display:block;color:Red} author{ display:block;font-style:italic} p ...

  6. DOM生成XML文档与解析XML文档(JUNIT测试)

    package cn.liuning.test; import java.io.File; import java.io.IOException; import javax.xml.parsers.D ...

  7. webservice04#对象与xml转换-jaxb#Stax解析xml#新建修改xml

    1,Student类 package com.yangw.xml; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement / ...

  8. 遍历文件 创建XML对象 方法 python解析XML文件 提取坐标计存入文件

    XML文件??? xml即可扩展标记语言,它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. 里面的标签都是可以随心所欲的按照他的命名规则来定义的,文件名为roi.xm ...

  9. XML专题:使用NSXMLParser解析xml文件

    使用NSXMLParser解析xml文件 1. 设置委托对象,开始解析     NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data ...

随机推荐

  1. Highcharts使用=====通过指定日期显示曲线

    1.说明: 利用HighStock显示曲线,在右上角的日期间隔选择好日期后,重新请求后台数据,重新加载曲线. 2.实现方法: 在HighStock的rangeSelector中有一个属性inputDa ...

  2. MongoDB 介绍及Windows下安装

    一.MongoDB简介 MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种.它在许多场景下可用于替代传统的关系型数据库或键/值存储方式.Mongo使用C++ ...

  3. nodejs安装过程及视频地址

    说实话在安装的过程中遇到了很多问题,包括npm install connect出错,主要是我之前安装了0.10版本之后安装4.X版本造成的,后面卸载没有卸载完全造成的,后面也就好了,网上说了很多重新设 ...

  4. math.h中的常量

    类似于Matlab中经常用到的一些常量,C++里边也是有的.(经查源文件无意中看到) 写入如下代码: #include<iostream> #include<iomanip> ...

  5. CSS XHTML规范化命名参考

    CSS命名规则 头:header 内容:content/containe 尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制整体布局宽度:wrapper 左右中:l ...

  6. Android ndk第一步,构建jni headers

    转载请注明出处:http://www.cnblogs.com/fpzeng/p/4281801.html 源码请见 https://github.com/fpzeng/HelloJNI PC系统: u ...

  7. AngularJS自定义表单验证

    <!doctype html> <html ng-app="myApp"> <head> <script src="G:\\So ...

  8. Lintcode--011(打劫房屋2)

    在上次打劫完一条街道之后,窃贼又发现了一个新的可以打劫的地方,但这次所有的房子围成了一个圈,这就意味着第一间房子和最后一间房子是挨着的.每个房子都存放着特定金额的钱.你面临的唯一约束条件是:相邻的房子 ...

  9. Android手机SSH Client客户端推荐JuiceSSH

    Windows上建立ssh服务器 参见: http://www.cnblogs.com/xred/archive/2012/04/21/2461627.html Android手机SSH Client ...

  10. resultMap之collection聚集

    <select id="getCarsWithCollection" resultMap="superCarResult"> select c1.c ...