以前还真没有见过数据表中存储XML格式的数据,刚开始听说的时候,还以为是数据表中有XML的字段类型,

再了解,其实也就是字符串类型的,只不过字符串的格式是XML格式的。确实孤陋寡闻!汗...

(可添加多个时间)

(xml的格式可以自己定义的)

一、如何存储XML格式的数据到表中:

1、定义相关实体类

    /// <summary>
/// 营业时间实体
/// </summary>
[XmlRoot("r")]
public class OpenHoursEntity
{
/// <summary>
/// 营业时间集合
/// </summary>
[XmlElement("ts")]
public List<OpenHours> OpenHoursList { get; set; }
} /// <summary>
/// 营业时间
/// </summary>
public class OpenHours
{
/// <summary>
/// 营业开始时间
/// </summary>
[XmlElement("b")]
public string BeginTime { get; set; }
/// <summary>
/// 营业结束时间
/// </summary>
[XmlElement("e")]
public string EndTime { get; set; }
}

2、保存

        /// <summary>
/// 生成XML,不包含声明和命名空间
/// </summary>
/// <typeparam name="T">对象类型</typeparam>
/// <param name="obj">对象</param>
/// <returns>xml字符串</returns>
public static string SerializeOnlyXml<T>(T obj)
{
var serializer = new XmlSerializer(typeof(T));
XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = new UTF8Encoding(false);
settings.OmitXmlDeclaration = true;
// 强制指定命名空间,覆盖默认的命名空间。
XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
namespaces.Add(string.Empty, string.Empty);
var stream = new MemoryStream();
using (XmlWriter writer = XmlWriter.Create(stream, settings))
{
serializer.Serialize(writer, obj, namespaces);
}
return Encoding.UTF8.GetString(stream.ToArray());
}
     Table1 model =new Table1();//数据表对应的实体
OpenHoursEntity entity = new OpenHoursEntity();//营业时间实体
entity.OpenHoursList = new List<OpenHours>();
if (!string.IsNullOrEmpty(lblOpeningHours.Text.Trim()))
{
if (lblOpeningHours.Text.Trim().Contains(","))
{
foreach (string item in lblOpeningHours.Text.Trim().Trim(',').Split(','))
{
OpenHours openhours = new OpenHours();
openhours.BeginTime = item.Split('~')[];
openhours.EndTime = item.Split('~')[];
entity.OpenHoursList.Add(openhours);
}
}
else
{
OpenHours openhours = new OpenHours();
openhours.BeginTime = lblOpeningHours.Text.Trim().Split('~')[];
openhours.EndTime = lblOpeningHours.Text.Trim().Split('~')[];
entity.OpenHoursList.Add(openhours);
}
}
   model.STPESortName="营业时间";
   model.STPEExtendName=SerializeOnlyXml<OpenHoursEntity>(entity);
Add(model);//保存到数据库

二、读取数据表中XML格式的数据并显示

        /// <summary>
/// 将对象序列化为xml字符串
/// </summary>
/// <typeparam name="T">对象类型</typeparam>
/// <param name="obj">对象</param>
/// <returns>xml字符串</returns>
public static string Serialize<T>(T obj)
{
//序列化实体
var serializer = new XmlSerializer(typeof(T));
//注意如果不设置encoding默认将输出utf-16
//注意这儿不能直接用Encoding.UTF8如果用Encoding.UTF8将在输出文本的最前面添加4个字节的非xml内容
var stream = new MemoryStream();
using (XmlWriter writer = XmlWriter.Create(stream, new XmlWriterSettings { Encoding = new UTF8Encoding(false) }))
{
serializer.Serialize(writer, obj);
}
return Encoding.UTF8.GetString(stream.ToArray());
}

显示已有的时间:

          var obj = TCSmartFramework.Utility.XMLHelper.GetObjFromXML<OpenHoursEntity>(ConvertHelper.ToString(dt.Rows[0]["STPEExtendName"]), Encoding.UTF8);
StringBuilder sbTime = new StringBuilder();
for (int i = 0; i < obj.OpenHoursList.Count(); i++)
{
sbTime.Append(obj.OpenHoursList[i].BeginTime + "~" + obj.OpenHoursList[i].EndTime).Append(',');
}
lblOpeningHours.Text = sbTime.ToString();

C#操作数据表中XML格式的数据的更多相关文章

  1. SQL中将某个表中的多行数据在一个字段显示

    项目需求:将某个表中的多行数据在一个字段显示,如下: 比如表A中有字段 ID,NAME, 表B中有字段ID,PID,DES, 表A,表B中的数据分别如下: ID NAME1 张三2 李四 ID PID ...

  2. xml格式的数据转化成数组

    将得到的xml格式的数据转化成数组 <?php //构造xml $url = "http://api.map.baidu.com/telematics/v3/weather?locat ...

  3. 如何在JSP页面里面显示xml格式的数据

    正常情况下,在jsp页面里的标签里写xml格式的数据,在浏览器里面的页面里显示出来的是乱码. 为什么会显示乱码呢?原来xml标签在jsp里会被解析为浏览器对象,因为xml最开始被设计出来是 为了写网页 ...

  4. scrapy 解析xml格式的数据

    XMLFeedSpider 主要用于 解析 xml格式的数据 创建一个scrapy 项目文件 scrapy startproject xxx 创建一个spider scrapy genspider - ...

  5. 在SQL SERVER中获取表中的第二条数据

    在SQL SERVER中获取表中的第二条数据, 思路:先根据时间逆排序取出前2条数据作为一个临时表,再按顺时排序在临时表中取出第一条数据 sql语句如下: select top 1 * from(se ...

  6. 删除oracle表中的完全重复数据

    今天数据库除了个问题:项目中的一张表,数据是从另外一个系统中相同的表里弄过来的,但是可能由于昨天同事导数据导致我这张表中的数据出现了完全相同的情况(所有字段),全部是两条,需要删除相同的数据. 做法: ...

  7. Java中XML格式的字符串4读取方式的简单比较

    Java中XML格式的字符串4读取方式的简单比较 1.java自带的DOM解析. import java.io.StringReader; import javax.xml.parsers.Docum ...

  8. MYSQL操作数据表中的记录

    36:操作数据表中的记录插入记录   INSERT INTO 表名  VALUES();   或者INSERT 表名  VALUES();  UPDATE更新记录(单表更新)  DELETE删除记录( ...

  9. 操作数据表中的记录——SELECT (where表达式、GROUP BY、HAVING、LIMIT)

    原文链接:http://www.ifyao.com/2015/01/26/%E6%93%8D%E4%BD%9C%E6%95%B0%E6%8D%AE%E8%A1%A8%E4%B8%AD%E7%9A%84 ...

随机推荐

  1. [转]Firefox+Burpsuite抓包配置(可抓取https)

    0x00 以前一直用的是火狐的autoproxy代理插件配合burpsuite抓包 但是最近经常碰到开了代理却抓不到包的情况 就换了Chrome的SwitchyOmega插件抓包 但是火狐不能抓包的问 ...

  2. 这一周~&&html+css的学习感悟

    一周一周过的很快,这个礼拜的学习状态并不是很好,好像每个月都有那么几天学习状态不怎么样.不知道是懈怠了还是怎么了…… 没有辜负上周一开始的目标,4.6号之前我就糊好了篇论文交了上去,不知道结果如何,希 ...

  3. 外部javascript形式

    ***.js: /** * 收起或者展开筛选框 */ function filterType(){ $("#filter_box_id").toggle(500); var sha ...

  4. 组合数问题(NOIP2016)

    题目链接:组合数问题 这道题可以算当年第二简单的. 这里要用到两个技巧: 用杨辉三角递推计算组合数 运用前缀和 有了这两点,这道题就出来了. 我们先运用杨辉三角推出题目范围内所能用到的所有组合数,然后 ...

  5. LD_LIBRARY_PATH

    LD_LIBRARY_PATH是Linux环境变量名,该环境变量主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径. 在linux下可以用export命令来设置这个值,比如 在linux ...

  6. python之Bottle框架

    一.简单的Bottle框架 1)bottle框架简介 安装 pip install bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架. 此框架只由一个 .py 文件,除 ...

  7. python生成器初步了解

    一.生成器 生成器的本质就是迭代器    一个一个的创建对象   1.创建生成器的方式:    1.生成器函数 2.通过生成器表达式来获取生成器 3.类型转换 2.优点 节省内存 ,生成器本身就是代码 ...

  8. 存储引擎中MYIASM是什么意思

  9. 2019.01.20 bzoj3999: [TJOI2015]旅游(树链剖分)

    传送门 树链剖分菜题. 题意不清差评. 题意简述(保证清晰):给一棵带权的树,每次从aaa走到bbb,在走过的路径上任意找两个点,求后访问的点与先访问的点点权差的最大值. 思路: 考虑暴力:维护路径的 ...

  10. 2018.10.26 洛谷P4551 最长异或路径(01trie)

    传送门 直接把每个点到根节点的异或距离插入01trie. 然后枚举每个点在01trie上匹配来更新答案就行了. 代码: #include<iostream> #include<cst ...