XML配置silverlight ,wcf 解析xml
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的更多相关文章
- Spring的配置文件ApplicationContext.xml配置头文件解析
Spring的配置文件ApplicationContext.xml配置头文件解析 原创 2016年12月16日 14:22:43 标签: spring配置文件 5446 spring中的applica ...
- python XML文件解析:用xml.dom.minidom来解析xml文件
python解析XML常见的有三种方法: 一是xml.dom.*模块,是W3C DOM API的实现,若需要处理DOM API则该模块很合适, 二是xml.sax.*模块,它是SAX API的实现,这 ...
- Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件,封装函数
总结了一下使用Python对xml文件的解析,用到的模块儿如下: 分别从xml字符串和xml文件转换为xml对象,然后解析xml内容,查询指定信息字段. from xml.dom.minidom im ...
- Java解析XML文档——dom解析xml
一.前言 用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object M ...
- CSS控制XML与通过js解析xml然后通过html显示xml中的数据
使用CSS控制XML的显示 book.css bookname{ display:block;color:Red} author{ display:block;font-style:italic} p ...
- DOM生成XML文档与解析XML文档(JUNIT测试)
package cn.liuning.test; import java.io.File; import java.io.IOException; import javax.xml.parsers.D ...
- webservice04#对象与xml转换-jaxb#Stax解析xml#新建修改xml
1,Student类 package com.yangw.xml; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement / ...
- 遍历文件 创建XML对象 方法 python解析XML文件 提取坐标计存入文件
XML文件??? xml即可扩展标记语言,它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. 里面的标签都是可以随心所欲的按照他的命名规则来定义的,文件名为roi.xm ...
- XML专题:使用NSXMLParser解析xml文件
使用NSXMLParser解析xml文件 1. 设置委托对象,开始解析 NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data ...
随机推荐
- 带权并查集 poj1182
首先要注意核心代码 int find(int i){ if(i == fa[i]) return fa[i]; int tt = find(fa[i]); num[i] ...
- poj1418 Viva Confetti 判断圆是否可见
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Viva Confetti Time Limit: 1000MS Memory ...
- PHP扩展开发(4) - 多类扩展
由于函数和单类的扩展,网上一搜一大片,这里就不再叙述了. 这里特别感谢laruence(鸟哥)开源的yaf扩展,解决困扰我多时的多类问题,还在看他的代码学习中,这里是对多类写法学习的一个阶段总结. ...
- ios7中使用scrollview来横向滑动图片,自动产生偏移竖向的偏移 问题
ios7中使用scrollview来横向滑动图片,自动产生偏移竖向的偏移 问题 如图红色为scrollview的背景色,在scrollview上加了图片之后,总会有向下的偏移 设置conten ...
- Swift 可选类型-备
我们先看看如下代码: var n1: Int = 10 n1 = nil //编译错误 let str: String = nil //编译错误 Int和String类型不能接受 ...
- Commons Beanutils使用setProperty() - 就是爱Java
有时不能只依靠getter/setter操作bean,如:需要名字动态取得的,或是访问bean内的field,甚至是集合或数组内bean的field,利用反射机制对bean的field进行处理,这时候 ...
- 浅谈PCB敷铜的“弊与利”
敷铜作为PCB设计的一个重要环节,不管是国产的青越锋PCB设计软件,还国外的一些Protel,PowerPCB都提供了智能敷铜功能,那么怎样才能敷好铜,我将自己一些想法与大家一起分享,希望能给同行带来 ...
- Windows脚本 - %~dp0的含义
含义是:更改当前目录为批处理本身的目录,有些晕吧?不急,我举例 比如你有个批处理a.bat在D:\qq文件夹下 a.bat内容为 cd /d %~dp0 在这里,cd /d %~dp0的意思就是cd ...
- 解决MVC项目中,静态html 未找到时候,404的跳转
using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using ...
- 改进RazorPad
从Git 上下载了作者的源码后,感觉用起来挺别扭,而且还要BUG............ 经过“篡改”后,好用多了,呵呵..