文档章节

CYQ.Data.Xml XmlHelper 助你更方便快捷的操作Xml/Html

晨曦之光
 晨曦之光
发布于 2012/03/09 12:56
字数 1542
阅读 36
收藏 0

前言:

CYQ.Data 在V3.0开始就加入Xml功能,跟随从秋色园开始,因为秋色园是以Xml方式加载Html操作为主的。

不过长久来一直没写Xml方向的相关教程,所以这块功能,一直不被人所发现及重视。

秋色园在应用Xml这块,还是经历了和处理了相当多的特殊环境和特殊字符和特别处理的,目前已相当稳定。

所以正式为它写文,下面为相关介绍及示例。

 

 

一:XmlHelper  类的说明

使用此类,可以轻松操作Xml/Html。

 

二:XmlHelper 使用说明:

 

1:实例化:

XmlHelper doc=new XmlHelper(...);

方法原型:

public XmlHelper()//默认构造函数[操作无名称空间的Xml]

public XmlHelper(bool forHtml)//参数为true时表示操作Html,为false时表示操作xml

public XmlHelper(string nameSpaceUrl)//操作名称空间的Xml

 

2:Xml/Html加载:

方法原型:

public void LoadXml(string xml)//从字符串加载

public bool Load(string absFilePath)//从文件路径加载

public bool Load(string absFilePath, XmlCacheLevel level)//带设置xml/html缓存级别

示例代码:

XmlHelper doc = new XmlHelper ( true);//操作html
if (doc.Load(Server.MapPath("html/index.html"), XmlCacheLevel.Hour))
{
  //加载html成功,并缓存html 1小时
}

 

3:查询

 

3.1:单结点查询:

方法原型:

public XmlNode GetByID(string id)//根据ID查找结点
public XmlNode GetByID(string id, XmlNode parentNode)//在parentNode节点下根据ID找结点
public XmlNode GetByName(string name)//根据Name查找结点
public XmlNode GetByName(string name, XmlNode parentNode))

public XmlNode Get(string tag, string attr, string value, XmlNode parentNode)//根据标签,属性及属性值和是否带父节点查找一个结点。

示例:

xml示例节点:

<p id="pID">这里有pID</p><div id="divID" ><p id="pID">pID又来一个</p></div>

XmlNode node = doc.GetByID("pID", doc.GetByID("divID"));//获取里面的ID节点

 

3.2:列表结点查询:

方法原型:

public XmlNodeList GetList(string tag)
public XmlNodeList GetList(string tag, XmlNode parentNode)
public XmlNodeList GetList(string tag, string attr)
public XmlNodeList GetList(string tag, string attr, XmlNode parentNode)
public XmlNodeList GetList(string tag, string attr, string value)
public XmlNodeList GetList(string tag, string attr, string value, XmlNode parentNode)

示例:

xml示例节点:

<p id="pID">这里有pID</p><div id="divID" ><p id="pID">pID又来一个</p></div>

XmlNodeList nodeList = doc.GetList("p","id","pid");//获取所有p的节点

 

4:创建结点:

方法原型:

public XmlNode CreateNode(string tag, string text, params string[] attrAndValue)

public void CreateNodeTo(XmlNode parentNode, string tag, string text, params string[] attrAndValue)

示例:

xml示例节点:

一开始节点:<div id="divID"></div>

代码创建:doc.CreateNodeTo(doc.GetByID("divID"), "p", "pID又来一个", "id", "pID");

创建后变成:<div id="divID" ><p id="pID">pID又来一个</p></div>

 

5:添加结点:

方法原型:

public void AppendNode(XmlNode parentNode, XmlNode childNode)

public void AppendNode(XmlNode parentNode, XmlNode childNode, int position)//position为将childNode放在parentNode的第N个子节点之后

 

6:删除结点:

方法原型:

public void Clear(XmlNode node)//保留节点,只清除内容和属性
public void Remove(XmlNode node)//删除节点
public void Remove(string id)//根据节点ID删除节点
public void RemoveChild(string id, int index)//移除某ID节点下的第N个子节点
public void RemoveChild(XmlNode node, int index)//移除某节点下的第N个子节点
public void RemoveAttrList(params string[] attrNames)//移除整个文档的指定属性

 

7:结点交互|替换|插入[前后],[支持在多个不同的Document节点中操作]

方法原型:

public void InterChange(XmlNode xNodeFirst, XmlNode xNodeLast)//两节点互换位置

public void ReplaceNode(XmlNode newNode, XmlNode oldNode)//节点替换

public void InsertAfter(XmlNode newNode, XmlNode refNode)//将newNode插入到refNode之后

public void InsertBefore(XmlNode newNode, XmlNode refNode)//将newNode插入到refNode之前

 

8:节点判断:

方法原型:

public bool Contains(string id)//是否存在某ID节点

public bool Contains(string id, XmlNode parentNode)//在parentNode下是否存在某ID节点

 

9:属性操作

方法原型:

public bool HasAttr(string nodeID, string attrName)//某节点是否存在某属性

public bool HasAttr(XmlNode node, string attrName)

public string GetAttrValue(string nodeID, string attrName, params string[] defaultValue)//获取某节点的属性值,并允许设置默认值

public string GetAttrValue(XmlNode node, string attrName, params string[] defaultValue)

public void RemoveAttr(string nodeID, params string[] attrNames)//移除节点指定属性

public void RemoveAttr(XmlNode node, params string[] attrNames)

 

10:保存为xml/html功能

方法原型:

public void Save()//保存并替换原始加载文件

public void Save(string fileName)//保存到指定的文件路径

 

三:与CYQ.Data.Table的交互功能

 

1:原生的赋值操作

方法原型:

public void Set(string id, string value)//为ID节点的InnerXml属性赋值
public void Set(string id, SetType setType, params string[] values)//为ID节点的setType[不同属性]赋值,如果是A链接,可赋多个值。
public void Set(XmlNode node, SetType setType, params string[] values)

示例:

原始:<a id="aID">这是一个原始A链接</id>

doc.Set("aID", SetType.A,"这是A链接","http://www.cyqdata.com%22,%22_blank/");

结果:<a id="aID" href=http://www.cyqdata.com/ target="_blank">这是A链接</id>

 

2:与MDataRow的交互[ID=任意三个字母前缀+字段名称]

方法原型:

public void LoadData(MDataRow row)//加载行数据
public void SetFor(string id)//将row的数据赋给ID节点的InnerXml属性
public void SetFor(string id, SetType setType)//将row的数据赋给ID节点的指定属性
public void SetFor(string id, SetType setType, params string[] values)//最后参数允许格式化值

示例:

原始<span id="labHits">点击</span>

doc.SetFor("labHits", SetType.InnerText, ValueReplace.Source + "(" + ValueReplace.New + ")");

结果:<span id="labhits">点击(12)</span>

ValueReplace.Source:指原来节点属性的值

ValueReplace.New: 指数据库的值

 

3:与MDataTable的交互

方法原型:

public void LoadData(MDataTable table)//加载表格

//SetForeach将ID节点复制并循环
public void SetForeach(string id, SetType setType, params object[] formatValues)
public void SetForeach(string id, string text, params object[] formatValues)
public delegate string SetForeachEventHandler(string text, object[] values, int row);
public event SetForeachEventHandler OnForeach;//针对每行进行格式化

 

示例一:SetForeach(string id, string text, params object[] formatValues)

原始标签:<select id="selClassID"></select>
doc.LoadData(table);//加载表格
doc.SetForeach("selClassID", "<option value="{0}" >{1}</option>", Class.ID, IsUserLang ? Class.Name : Class.PKey);
结果标签:<select id="selClassID"><option value="1">标识1</option>....</select>

这语句将循环出一个下拉列表。

 

示例二:SetForeach(string id, SetType setType, params object[] formatValues)

原始标签:<select id="selClassID"><option value="{0}" >{1}</option></select>

doc.SetForeach("selClassID", SetType.InnerXml,, Class.ID, IsUserLang ? Class.Name : Class.PKey);

结果标签:和上面一样。

 

示例三:循环格式化:

doc.OnForeach += new XmlHelper.SetForeachEventHandler(Document_OnForeach);

 string Document_OnForeach(string text, object[] values, int row)
 {

  //text为:<option value="{0}" >{1}</option>
           values[0]=“2”;

           values[1]=“标识2”;

           return text;
 }

结果标签:<select id="selClassID"><option value="2">标识2</option>....</select>


原文链接: http://www.cnblogs.com/cyq1162/archive/2011/04/26/2028869.html

本文转载自:http://www.cnblogs.com/cyq1162/archive/2011/04/26/2028869.html

共有 人打赏支持
晨曦之光
粉丝 394
博文 4426
码字总数 2559
作品 0
深圳
程序员
私信 提问
ASP.NET开源博客QBlog开发者视频教程:[皮肤]模板机制页面填充解说(五)

前言: 连续的继续折腾,将模板机制的页面填充部分给录了下,不过这一块不好录,最后不得已分四段,剪头去尾,把四段视频合成一个,勉强勉强的算一集了。 PS:大伙在学习的时候,还是要配合"...

路过秋天
2011/06/26
0
0
厚积薄发,丰富的公用类库积累,助你高效进行系统开发(9)----各种常用辅助类

俗话说,一个好汉十个帮,众人拾柴火焰高等都说明一个道理,有更多的资源,更丰富的积累,都是助你走向成功,走向顶峰的推动力。 本篇的公用类库的介绍主题是程序开发中常用到的各种格式转换...

长平狐
2012/06/11
81
0
厚积薄发,丰富的公用类库积累,助你高效进行系统开发(9)----各种常用辅助类

俗话说,一个好汉十个帮,众人拾柴火焰高等都说明一个道理,有更多的资源,更丰富的积累,都是助你走向成功,走向顶峰的推动力。 本篇的公用类库的介绍主题是程序开发中常用到的各种格式转换...

长平狐
2012/08/22
68
0
2017-5-5

1.和超哥研究支付文档的退款流程,知道了几个新的工具类 jsoup是java用来解析html的解析器 Jsoup.connect(url地址);解析回html格式的文本。 Document对象:用来操作返回的html数据 XMLHelpe...

seventeenW
2017/05/05
0
0
Asp.Net Core 2.0 项目实战(8)Core下缓存操作、序列化操作、JSON操作等Helper集合类

Asp.Net Core 2.0 项目实战(1) NCMVC开源下载了 Asp.Net Core 2.0 项目实战(2)NCMVC一个基于Net Core2.0搭建的角色权限管理开发框架 Asp.Net Core 2.0 项目实战(3)NCMVC角色权限管理前...

郑州-在路上
2018/04/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Ruby中的继承、原型、面向对象、访问域

先有类还是先有对象 从鸡蛋悖论解决可以悟到一个道理,不要从常识上假设非此即彼和绝对静止。 Ruby中的类和对象正是这么个东西 我们创建一个类,那它就是Class这个对象的实例,而Class,于是...

可数局部基
40分钟前
3
0
什么时候使用字节流、什么时候使用字符流,二者的区别

在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成。 InputStream 和OutputStream,...

watermelon11
今天
6
0
Alpakka Kafka,反应式Kafka客户端

Alpakka Kafka 是一个要用于 Java 和 Scala 语言的开源的流感知和反应式集成数据线项目。它建立在 Akka Stream之上,提供了 DSL 来支持反应式和流式编程,内置回压功能。Akka Streams 是 Re...

羊八井
今天
5
0
PHP7源码编译安装详解

$ yum groupinstall "development tools"$ yum install -y gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype \freetype-devel libpng libpng-devel libxml2 ......

问题终结者
今天
5
0
Django学习笔记-从创建虚拟环境到启用服务

1 前置条件 windows系统下,目前已经完成anaconda3或miniconda3的安装,这也意味着已经完成了python3的安装。 2 创建虚拟环境 1、通过Anaconda Prompt,使用conda命令创建虚拟环境(base) e...

davidwbnu
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部