天天看點

CYQ.Data.Xml XmlHelper 助你更友善快捷的操作Xml/Html

前言:

CYQ.Data.Xml XmlHelper 助你更友善快捷的操作Xml/Html

cyq.data 在v3.0開始就加入xml功能,跟随從秋色園開始,因為秋色園是以xml方式加載html操作為主的。

不過長久來一直沒寫xml方向的相關教程,是以這塊功能,一直不被人所發現及重視。

秋色園在應用xml這塊,還是經曆了和處理了相當多的特殊環境和特殊字元和特别處理的,目前已相當穩定。

是以正式為它寫文,下面為相關介紹及示例。

CYQ.Data.Xml XmlHelper 助你更友善快捷的操作Xml/Html

使用此類,可以輕松操作xml/html。

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緩存級别

示例代碼:

CYQ.Data.Xml XmlHelper 助你更友善快捷的操作Xml/Html

xmlhelper doc = new xmlhelper (true);//操作html

if (doc.load(server.mappath("html/index.html"), xmlcachelevel.hour))

{

  //加載html成功,并緩存html 1小時

}

CYQ.Data.Xml XmlHelper 助你更友善快捷的操作Xml/Html

3:查詢

3.1:單結點查詢:

CYQ.Data.Xml XmlHelper 助你更友善快捷的操作Xml/Html

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)//根據标簽,屬性及屬性值和是否帶父節點查找一個結點。

CYQ.Data.Xml XmlHelper 助你更友善快捷的操作Xml/Html

示例:

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:清單結點查詢:

CYQ.Data.Xml XmlHelper 助你更友善快捷的操作Xml/Html

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, xmlnodeparentnode)

CYQ.Data.Xml XmlHelper 助你更友善快捷的操作Xml/Html

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)

CYQ.Data.Xml XmlHelper 助你更友善快捷的操作Xml/Html

一開始節點:<div id="divid"></div>

代碼建立:doc.createnodeto(doc.getbyid("divid"), "p", "pid又來一個", "id", "pid");

建立後變成:<div id="divid" ><p id="pid">pid又來一個</p></div>

CYQ.Data.Xml XmlHelper 助你更友善快捷的操作Xml/Html

5:添加結點:

public void appendnode(xmlnode parentnode, xmlnode childnode)

public void appendnode(xmlnode parentnode, xmlnode childnode, intposition)//position為将childnode放在parentnode的第n個子節點之後

6:删除結點:

CYQ.Data.Xml XmlHelper 助你更友善快捷的操作Xml/Html

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)//移除整個文檔的指定屬性

CYQ.Data.Xml XmlHelper 助你更友善快捷的操作Xml/Html

7:結點互動|替換|插入[前後],[支援在多個不同的document節點中操作]

CYQ.Data.Xml XmlHelper 助你更友善快捷的操作Xml/Html

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之前

CYQ.Data.Xml XmlHelper 助你更友善快捷的操作Xml/Html

8:節點判斷:

public bool contains(string id)//是否存在某id節點

public bool contains(string id, xmlnode parentnode)//在parentnode下是否存在某id節點

9:屬性操作

CYQ.Data.Xml XmlHelper 助你更友善快捷的操作Xml/Html

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)

CYQ.Data.Xml XmlHelper 助你更友善快捷的操作Xml/Html

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>

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)//最後參數允許格式化值

CYQ.Data.Xml XmlHelper 助你更友善快捷的操作Xml/Html

原始<span id="labhits">點選</span>

doc.setfor("labhits", settype.innertext, valuereplace.source + "(" + valuereplace.new + ")");

結果:<span id="labhits">點選(12)</span>

valuereplace.source:指原來節點屬性的值

valuereplace.new: 指資料庫的值

CYQ.Data.Xml XmlHelper 助你更友善快捷的操作Xml/Html

3:與mdatatable的互動

CYQ.Data.Xml XmlHelper 助你更友善快捷的操作Xml/Html

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;//針對每行進行格式化

CYQ.Data.Xml XmlHelper 助你更友善快捷的操作Xml/Html

示例一: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);

結果标簽:和上面一樣。

示例三:循環格式化:

CYQ.Data.Xml XmlHelper 助你更友善快捷的操作Xml/Html

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;

 }

CYQ.Data.Xml XmlHelper 助你更友善快捷的操作Xml/Html

結果标簽:<select id="selclassid"><option value="2">辨別2</option>....</select>

版權聲明:本文原創發表于部落格園,作者為路過秋天,原文連結:

http://www.cnblogs.com/cyq1162/archive/2011/04/26/2028869.html