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

前端之家收集整理的这篇文章主要介绍了CYQ.Data.Xml XmlHelper 助你更方便快捷的操作Xml/Html前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_502_0@前言:

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

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

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

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

@H_502_0@

@H_502_0@

@H_502_0@一:XmlHelper 类的说明

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

@H_502_0@

@H_502_0@二:XmlHelper使用说明:

@H_502_0@

@H_502_0@1:实例化:

@H_502_0@XmlHelper doc=new XmlHelper(...);

方法原型:

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

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

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

@H_502_0@

@H_502_0@2:Xml/Html加载:

方法原型:

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

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

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

@H_502_0@示例代码

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

@H_502_0@

@H_502_0@3:查询

@H_502_0@

@H_502_0@3.1:单结点查询

方法原型:

@H_502_0@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)//根据标签属性属性值和是否带父节点查找一个结点。

@H_502_0@示例:

@H_502_0@

@H_502_0@xml示例节点:

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

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

@H_502_0@

@H_502_0@3.2:列表结点查询

方法原型:

@H_502_0@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 value)
public XmlNodeList GetList(string tag,XmlNode parentNode)

@H_502_0@示例:

@H_502_0@@H_502_0@
@H_502_0@

@H_502_0@xml示例节点:

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

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

@H_502_0@

@H_502_0@4:创建结点:

方法原型:

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

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

@H_502_0@示例:@H_502_0@

@H_502_0@@H_502_0@

@H_502_0@xml示例节点:

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

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

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

@H_502_0@

@H_502_0@5:添加结点:

方法原型:

@H_502_0@public void AppendNode(XmlNode parentNode,XmlNode childNode)

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

@H_502_0@

@H_502_0@6:删除结点:

方法原型:

@H_502_0@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)//移除整个文档的指定属性

@H_502_0@

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

方法原型:

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

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

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

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

@H_502_0@

@H_502_0@8:节点判断:

方法原型:

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

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

@H_502_0@

@H_502_0@9:属性操作

方法原型:

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

@H_502_0@public bool HasAttr(XmlNode node,string attrName)

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

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

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

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

@H_502_0@

@H_502_0@10:保存为xml/html功能

方法原型:

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

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

@H_502_0@

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

@H_502_0@

@H_502_0@1:原生的赋值操作

@H_502_0@方法原型:

@H_502_0@
@H_502_0@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)

@H_502_0@示例:

@H_502_0@

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

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

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

@H_502_0@

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

@H_502_0@方法原型:

@H_502_0@
@H_502_0@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,params string[] values)//最后参数允许格式化值

@H_502_0@示例:

@H_502_0@

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

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

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

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

@H_502_0@ValueReplace.New: 指数据库的值

@H_502_0@

@H_502_0@3:与MDataTable的交互

@H_502_0@方法原型:

@H_502_0@

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

@H_502_0@//SetForeach将ID节点复制并循环
public void SetForeach(string id,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,params object[] formatValues)

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

doc.SetForeach("selClassID",SetType.InnerXml,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;
}

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

猜你在找的XML相关文章