随笔分类 - Xml
Xml and Xsd
使用rest方式修改服务端xml文件
摘要:想法:最近想用REST的方式去修改一个远端的xml文件,于是自己写了个Handler设计:用现成的XPath,和GET,POST,PUT,DELETE这4个http方法作为动作,达到直接读写xml限制:在一些浏览器中“//”和“..”会被直接翻译,因此需要使用这些的时候,不得不使用XPath的完整形式PUT方法不能新建不存在的节点,因为XPath中不包含足够的定位信息POST方法只能以节点为单位,且只能添加在最后使用MVC4代码:https://github.com/vwxyzh/XmlRestHandler使用:只需要注册HandlerGlobalConfiguration.Configur
阅读全文
当foreach遇到yield和上下文切换时
摘要: 说到c#里面foreach应该是尽人皆知的了,不过,各位是不是了解foreach是怎么工作的哪? 大多数情况下,即使不了解foreach是如何工作的,照样可以把代码写的很正确。不过,前两天我在写一段代码时,却不得不把foreach大卸八块,原因就是遇到了yield和上下文切换,详细情况听我慢慢道来。 情景介绍 ...
阅读全文
c#操作Xml(八)
摘要:前言 呃,已经是第八篇了,怎么感觉Xml还有好多东西没讲。。。还是先挑比较重要的东西讲一下吧,今天的主角是.net的Xml序列化。 在主角出现前,先回想一下,平时什么地方用了Xml序列化吧: 第一个想到的当然是Web Service和更进一步的WCF,没有Xml序列化的话,就需要手动处...
阅读全文
c#操作Xml(七)
摘要:前言 上集介绍了使用XmlWriter如何写一个大型的xml,不难发现XmlWriter使用起来略比Linq to Xml麻烦一些,不过优势却是基本不消耗内存。不过XmlWriter的功能仅仅是写Xml,要读取Xml则需要依靠XmlReader,这就是今天的主角。 准备工作 首先,来准备一个大型的xml:static v...
阅读全文
c#操作Xml(六)
摘要:前言 最近工作比较忙,都没空写Blog,一拖就拖了一个月。废话就不说了,回顾一下上集,讲到了如何用Linq写一个超大的Xml,而不至于内存溢出,但是用Linq始终有一个限制,那就是必须要安装.net Framework 3.5,如果部署环境上没有安装3.5的,那如何是好啊? 设置目标 不妨把目标设置得与前一篇相同,也是把某目录下的所有文件和目录输出到一个xml里面去,这里就不再重复了。 分...
阅读全文
c#操作Xml(五)
摘要:上集回顾 上两集都介绍了Linq to Xml的相关用法,需要注意的一点是Linq to Xml是in-memory的处理方式,所以有多少节点,就要消耗多少内存,如果这个xml很大,但系统内存却有限的情况下怎么办哪? 设置目标 今天要做的是把某目录下的所有文件和目录输出到一个xml里面去,例如:<?xml version="1.0" encoding="gb2312"?><...
阅读全文
c#操作Xml(四)
摘要:上集回顾 上集初步介绍了Linq to Xml的基本操作,简单的新建xml操作和简单的查询xml操作。不过,可以注意到的是上集里面的xml都是没有Namespace的xml,那么有Namespace的xml如何操作哪? 设置目标 先看看我们目标,完整这样一个xml:<?xml version="1.0" encod...
阅读全文
c#操作Xml(三)
摘要: c#进入了3.0时代,引入了强大的Linq,同时提供了Linq to Xml,这个全新的Xml Api。与Linq to Xml相比,传统的DOM Api就显得笨重而繁杂了。 Linq to Xml的本质 首先,linq to xml是一种in-memory的技术(官方说法是:LINQ to XML provides ...
阅读全文
c#操作Xml(二)
摘要:2 用Dom的方式创建/修改xml 上一篇讲了如何用dom的方式读一个xml,这一篇就讲一下如何用dom的方式去写一个xml。不过,用dom的写Xml本身并不是一个好主意,因为Dom方式本身的废话超多,做一个简单的事情就需要好几句语句,但是作为一个基本的方式还是有必要了解一下的。 2.1 用Dom的方式去创建xml 如果...
阅读全文
c#操作Xml(一)
摘要:Xml作为一个非常重要的纯文本格式已经进入了编程的很多领域,作为一个面向应用层面的c#也一样在很多领域离不开Xml。 但是,c#在很多方面对Xml做了写封装,以至于很多操作Xml的代码,都不需要手动去写。例如,c#写WebService这种需要大量操作Xml的服务,除了极其个别的情况下,基本看不到任何操作Xml的代码。这是c#的一个优势,但是,最近发现正是这样一些c#的优势,导致了新一代c#程序...
阅读全文
从写组件说Xml——改良(六)
摘要:1.提出问题 前面五篇说了如何实现,但是如果xml配置错了怎么办哪? 首先,利用Xsd,已经可以保证大部分xml的类型不会出错,但是,之前把Expression设计为弱类型的,也就意味着Expression不对其返回的类型负责,这是第一个在xml运行时存在的不稳定因素。 第二,变量本身也有不安全因素,首先变量名本身就非常容易出现书写错误,其次,变量名本身也是弱类型的,不到运行时,根本不知道里...
阅读全文
从写组件说Xml——实现(五)
摘要:1.实现接口 前面一篇已经确定了接口,并且已经生成了类,但是这些类显然还不完整,因为这些类没有实现任何接口。 不过,在实现接口之前,必须要注意的是ms的这一段警告: 这里清楚地说明了直接修改这段代码的一个风险:如果xsd发生变化了,那么再次用xsd.exe生成代码时,所做的修改讲丢失。这时要么手工迁移,要么就再写一遍,无论哪种,都是无法接受的。 因此,实现接口的代码不能放在生成的pptx.c...
阅读全文
从写组件说Xml——接口和初步实现(四)
摘要:前面三篇把Xsd已经定义好了,这时,对组件开发者和组件使用者而言都已经知道xml将是一个什么样的了。但是组件的使用者依然无法全面开始工作,因为他们不知道如何让这个xml真正跑起来。 因此,这一篇就讲一下,如何定义接口(这里的接口是泛义的接口。在这一篇的第一、第二节暂时忘了Xml)。 1.定义接口 快速定义接口的方式,就是利用类关系图,创建接口: 一开始,当然需要定义一个入口: 定义一个Cre...
阅读全文
从写组件说Xml——Xsd篇(三)
摘要:代码块与变量 上一篇讲到了强大的表达式,这一篇讲一下一个对于语言而言同样重要的代码块。 先看一个c#的代码块: 注意看这个例子,里面其实有两个嵌套的代码块,一个是SomeMethod的方法体,在里面的那个代码块中,先定义了一个temp的变量,然后利用这个temp变量,去交换了s1和s2(定义在SomeMethod这个代码块中的变量)的内容。 这里可以看到代码块需要这样几个要素: 变量定义 ...
阅读全文
从写组件说Xml——Xsd篇(一)
摘要:初步创建一个Xsd 既然要写组件,当然就要确定这个组件的需求,以及确定如何去写。 一般情况下,组件的需求应该不是问题,因为对于这种封装技术难度的组件而言,需求很简单,就是尽量降低技术难度,让更多人能用这个组件,完成本来比较麻烦的事情。 那么从哪里开始写哪? 我选择了从xsd(XML Schema Definition)开始,为什么选择xsd哪? 在拥有xsd的情况下,可以很容易的写一个配...
阅读全文
从写组件说Xml——背景篇(零)
摘要:以一个修改pptx的组件为例,说一些关于Xml知识。
阅读全文
一个比较bt的xslt
摘要:最近碰到一个比较bt的xslt的转换需求,简化后,原xml是: Code Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> x1 y1 x2 y2 z2 x3 y3 x4 z4 x5 y5 ...
阅读全文