前言:
CYQ.Data 在V3.0开始就加入Xml功能,跟随从秋色园开始,因为秋色园是以Xml方式加载Html操作为主的。
不过长久来一直没写Xml方向的相关教程,所以这块功能,一直不被人所发现及重视。
秋色园在应用Xml这块,还是经历了和处理了相当多的特殊环境和特殊字符和特别处理的,目前已相当稳定。
所以正式为它写文,下面为相关介绍及示例。
一:XmlHelper 类的说明
二:XmlHelper 使用说明:
1:实例化:
方法原型:
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缓存级别
示例代码:
3:查询
3.1:单结点查询:
方法原型:
示例:
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:列表结点查询:
方法原型:
示例:
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:删除结点:
方法原型:
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:原生的赋值操作
方法原型:
示例:
原始:<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=任意三个字母前缀+字段名称]
方法原型:
示例:
原始<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)
这语句将循环出一个下拉列表。
示例二: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>