以前还真没有见过数据表中存储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. java面试感悟【一】

    我最终选择不包装工作经验,或许是因为我怂,或许是因为一些莫名其妙的坚持…… 然而结果就是在boss上沟通了20多家,只有7家让我投了简历,1家跟我说要我发个时间段给他稍后告诉我面试时间,然后就没有然后 ...

  2. python之并发编程进阶篇9

    一.守护进程和守护线程 1)守护进程的概念 什么是守护进程: 守护: 在主进程代码结束情况下,就立即死掉 守护进程本质就是一个子进程,该子进程守护着主进程 为何要用守护进程 守护进程本质就是一个子进程 ...

  3. yum 安装报错:Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock error was 14: curl#6 - "Could not resolve host: mirrorlist.centos.org; Unknown error"

    [root@venn09 ~]# yum install -y vim Loaded plugins: fastestmirror Could not retrieve mirrorlist http ...

  4. vetur插件提示 [vue-language-server] Elements in iteration expect to have 'v-bind:key' directives

    错误如下图所示: 错误提示: [vue-language-server] Elements in iteration expect to have 'v-bind:key' directives.Re ...

  5. SQL语句之奇形怪状的冷门函数

    lag() over() ) OVER(ORDER BY C.column) FROM Table C; 第一条记录已经无法再取前一条记录,所以LAG()函数返回空. SQL为意思如下. LAG(C. ...

  6. DocumentFragment类型

    nodeType 11 nodeName #document-fragment nodeValue NULL parentNode null createdocumentfragment()方法创建了 ...

  7. Windows下Python安装: requires numpy+mkl 和ImportError: cannot import name NUMPY_MKL

    最近写了一篇关于“微软开源分布式高性能GB框架LightGBM安装使用”的文章,有小伙伴安装Python环境遇到了问题.我个人也尝试安装了一下,确实遇到了很多问题."Windows7下pyt ...

  8. AngularJS的select设置默认值

    AngularJS的select设置默认值 在使用Angular时候使用select标签时会遇到绑定数据指定默认显示值可这样实现 <!DOCTYPE html> <html ng-a ...

  9. HBase thrift2 TIOError

    如果HBase thrift2报:"TIOError exception: Default TException", 这个可能是因为操作的表不存在,不一定是网络或磁盘操作异常. H ...

  10. linux搭建简易版本的FastDFS服务器

    开发环境:centos7环境 搭建FastDFS集群搭建非常复杂,对于初期学习FastDFS来说,搭建个单机版的作为入门更为实际一些. 首先感谢“在京奋斗者“”博主的详细搭建过程,附上博客地址http ...