Hiện thực các lớp HtmlDocument, Node, Attribute

Một phần của tài liệu TÌM HIỂU HTML và CÔNG NGHỆ XML xây DỰNG TRÌNH BIÊN DỊCH HTML SANG XML (Trang 79 - 86)

4.5.6.1. HtmlDoc

Một số thành phần chính của lớp HtmlDoc

Thuộc tính:

Documentnode: là node gốc

Text: lưu trữ toàn bộ nội dung của tài liệu html

Currentnode: lưu trữ Node hiện hành đang được duyệt trong tài liệu html

Lastparentnode: node cha trước của node hiện hành đang được duyệt.

Currentattribute: thuộc tính hiện hành đang được duyệt.

Streamencoding: lưu trữ bộ mã của tài liệu html

Openednodes: Những node đã mở

Lastnodes: các node trước.

Phương thức:

CreateNode(type,index): tạo một node với tham số đầu vào là kiểu node(document, node, comment hoặc text), index là vị trí bắt đầu của node

CreateAttribute(name): tạo thuộc tính với tham sốđầu vào là tên cảu thuộc tính. Trả về

thuộc tính (HtmlAttribute)

CreateAttribute(name,value): tạo thuộc tính với tham sốđầu vào là tên thuộc tính và giá trị của thuộc tính.

Parse(): Phân tích tài liệu Html

PushNodeNameStart(starttag,index): Ghi nhớ vị trí bắt đầu của một node với tham số đầu vào là starttag(cho biết đây có phải là thẻ mở hay không) và index (vị trị bắt đầu của tên thẻ)

PushNodeNameEnd(index): lưu lại vị trí kết thúc của một thẻ, với tham số đầu vào là index(vị trị kết thúc thẻ)

PushNodeStart(type,index): tạo node(document, node, comment hoặc text), index là vị

trí bắt đầu của node

PushNodeEnd(index,close): add node vào node cha trước của nó(lastparentnode) với tham số đầu vào là index(vị trí kết thúc thẻ) và close(xác định xem node này đã đóng chưa)

PushAttributeNameStart(index): tạo thuộc tính và lưu vị trí bắt đầu của thuộc tính, với tham sốđầu vào là vị trí bắt đầu của thuộc tính.

PushAttributeNameEnd(index): Add thuộc tính vào danh sách thuộc tính của node hiện hành.

PushAttributeValueStart(index): lưu trữ vị trí bắt đầu của thuộc tính hiện hành, với tham sốđầu vào là index(vị trí kết thúc của giá trị thuộc tính hiện hành).

CloseCurrentNode():đóng node hiện hành.

UpdateLastParentNode(): cập nhật lại node cha trước.

CurrentAttributeName(): lấy tên thuộc tính hiện hành.

CurrentAttributeValue(): lấy giá trị thuộc tính hiện hành.

CurrentNodeName(): lấy tên node hiện hành.

CurrentNodeInner(): lấy đoạn mã nằm bên trong node hiện hành.

CurrentNodeOuter(): lấy đoạn mã nằm bên trong node hiện hành và tên của node hiện hành.

Lp HTMLDOC

4.5.6.2. HtmlNode

Các thành phần chính của lớp HtmlNode

Thuộc tính:

nodetype: kiểu node.

nextnode: node tiếp ngay sau đối tượng node đang sử dụng.

prevnode: node trước của đối tượng node đang sử dụng.

parentnode: node cha của đối tượng node đang sử dụng.

ownerdocument: tài liệu Html mà đối tượng này thuộc về.

childnodes: danh sách node con của đối tượng node đang sử dụng.

attributes: danh sách thuộc tính của đối tượng node đang sử dụng.

innerstartindex: vị trí bắt đầu của đoạn mã html nằm bên trong đối tượng node đang sử

dụng.

innerlength: chiều dài đoạn mã html nằm bên trong đối tượng node đang sử dụng.

outerstartindex: vị trí bắt đầu của đoạn mã html nằm bên trong đối tượng node đang sử

dụng và tên của đối tượng node đang sử dụng.

outerlength: chiều dài của đoạn mã html nằm bên trong đối tượng node đang sử dụng và tên của đối tượng node đang sử dụng;

namestartindex: vị trí bắt đầu tên node.

Namelength: chiều dài tên node.

Starttag:ấn định đây có phải là thẻ mở hay không. HtmlDoc - Text: string - Documentnode: HtmlNode - Currentnode: HtmlNode - Lastparentnode: HtmlNode - Currentattribute: HtmlAttribute - Streamencoding: Endcoding …….

+ CreateNode(type:HtmlNodeType, index: integer) + CreateAttribute(name: string)

+ CreateAttribute(name: string, value: string) + Parse()

+ PushNodeNameStart(starttag: bool, index: integer) + PushNodeNameEnd(index: integer)

+ PushNodeStart(type: HtmlNodeType, index: integer) + PushNodeEnd(index: integer, close: bool)

+ PushAttributeNameStart(index: integer) + PushAttributeNameEnd(index: integer) + PushAttributeValueStart(index: integer) + UpdateLastParentNode() + CurrentAttributeName() + CurrentAttributeValue() + CloseCurrentNode() ……..

Name: tên node.

Phương thức:

IsClosedElement(name): kiểm tra xem có phải là thẻđóng hay không với tham sốđầu vào là tên thẻ

CanOverlapElement(name): kiểm tra xem thẻ này có phải là thẻ cho phep chồng lấp hay không, với tham sốđầu vào là tên thẻ.

IsCDataElement(name): kiểm tra xem thẻ có phải là thẻ Cdata hay không, với tham số đầu vào là tên thẻ.

CopyFrom(node, deep): tạo một bản sao của node và các con của nó, với tham số đầu vào là node(một thẻ) và deep(quyệt định xem có sao chép con của nó hay không).

CloseNode(endnode):đóng node

CloneNode(newName,deep): tạo một bản sao của node hiện hành với tham sốđầu vào là newName(ten mới của node) và deep(quyết định xem có sao chép con của node này hay không).

RemoveAll(): loại bỏ tất cả các node con của node hiện hành

RemoveChild(oldChild): loại bỏ một node con cụ thể, với tham số đầu vào là oldChild(node muốn loại bỏ).

RemoveChild(oldChild, keepGrandChildren): loại node con cụ thể với tham sốđầu vào là oldchild(node con muốn loại bỏ) và keepGrandChildren(quyết định xem có loại bỏ

node cháu của node hiện hành hay không).

ReplaceChild(newChild, oldChild): thay một node con bằng một node con mới, với tham sốđầu vào là newchild(mode con mới) và oldchild(node con cũ).

InsertBefore(newChild, refChild): chèn một node mới vào trước một node cụ thể. Với tham sốđầu vào là newchild(node cần chèn vào) và refchild(node tham chiếu, new child sẽđược chèn vào trước node này).

InsertAfter(newChild, refChild): chèn một node mới vào sau một node cụ thể. Với tham số đầu vào là newchild(node cần chèn vào) và refchild(node tham chiếu, new child sẽ được chèn vào sau node này).

PrependChild(newChild): chèn một node vào đầu danh sách node con của node hiện hành. Với tham sốđầu vào là newchild(node cần chèn vào).

PrependChildren(newChildren): chèn một danh sách node vào đầu danh sách node con của node hiện hành. Với tham số đầu vào là newChildren(danh sách node cần chèn vào).

AppendChild(newChild): chèn một node vào cuối danh sách node con của node hiện hành. Với tham sốđầu vào là newchild(node cần chèn vào).

AppendChildren(newChildren): chèn một danh sách node vào cuối danh sách node con của node hiện hành. Với tham số đầu vào là newChildren(danh sách node cần chèn vào).

GetAttributeValue(name,def): lấy giá trị thuộc tính của node hiện hành với tham sốđầu vào là name(tên thuộc tính) và def(giá trị mặc định)

SetAttributeValue(name,value): thiết lập giá trị của thuộc tính với tham số đầu vào là name(tên thuộc tính) và value(giá trịđể thiết lập)

WriteAttribute(TextWriter outText, HtmlAttribute att): ghi thuộc tính vào TextWriter.

WriteTo(TextWriter outText): lưu node hiện hành vào TextWriter.

WriteTo(XmlWriter writer): lưu node hiện hành vào XmlWriter.

WriteContentTo(TextWriter outText): lưu tất cả các con của node hiện hành vào TextWriter

Lp HTML NODE

4.5.6.3. HtmlAttribute

Thuộc tính:

Namestartindex: vị trí bắt đầu tên cảu thuộc tính.

Namelength: chiều dài tên của thuộc tính.

Valuestartindex: vị trí bắt đầu của giá trị thuộc tính.

Valuelength: chiều dài của giá trị thuộc tính.

Ownerdocument: tài liệu html mà thuộc tính này thuộc về.

Ownernode: node chứa thuộc tính html này.

Name: tên thuộc tính.

Value: giá trị thuộc tính.

Phương thức:

Clone(): tạo một bản sao của thuộc tính.

CompareTo(obj): so sánh thuộc tính hiện hành với một thuộc tính khác, so sánh dựa trên tên của thuộc tính.

HtmlNode - Nodetype:HtmlNodeType - Nextnode: HtmlNode - Prevnode: HtmlNode - Parentnode: HtmlNode - Childnodes: HtmlNodeCollection - Attributes: HtmlAttributeCollection - Name: string ……. + RemoveAll() + RemoveChild(oldChild: HtmlNode) + ReplaceChild(newChild:HtmlNode, oldChild:HtmlNode) + InsertBefore(newChild:HtmlNode, refChild:HtmlNode) + InsertAfter(newChild:HtmlNode, refChild:HtmlNode) + PrependChild(newChild:HtmlNode) + PrependChildren(newChildren:HtmlNodeCollection) + AppendChild(newChild:HtmlNode) + AppendChildren(newChildren: HtmlNodeCollection) + GetAttributeValue(name:string,def:string) + SetAttributeValue(name:string,value:string) + WriteAttribute(outText:TextWriter,att: HtmlAttribute) + WriteTo(outText: TextWriter) + WriteTo(writer: XmlWriter) + WriteContentTo(outText:TextWriter) ……..

Lp HTMLATTRIBUTE 4.5.6.4. HtmlCommentNode thừa kế HtmlNode HtmlCommentNode : HtmlNode Thuộc tính: comment Phương thức:

HtmlCommentNode(HtmlDoc ownerdocument, int index): base(HtmlNodeType.Comment, ownerdocument, index) { } 4.5.6.5. HtmlTextNode thừa kế từ HtmlNode Thuộc tính text Phương thức

internal HtmlTextNode(HtmlDoc ownerdocument, int index) :

base(HtmlNodeType.Text, ownerdocument, index) { } HtmlAttribute - Namestartindex: integer - Namelength: integer - Valuestartindex: integer - Valuelength: integer - Ownerdocument: HtmlDoc - Ownernode: HtmlNode - Name: string - Value: string + Clone() + CompareTo(obj) …..

4.5.6.6. HtmlNodeCollection

Lp HtmlNodeCollection

Để quản lý một danh sách các node trong tài liệu HTML ta thiết kế một lớp mới là HtmlNodeCollection, lớp này sử dụng giao diện Ienumerable(lớp này hỗ trợ việc liệt kê từng phần tử trong một tập hợp)

Thuộc tính:

Items: danh sách các phần tử mà đối tượng HtmlNodeColection quản ly

Parentnode: node cha của danh sách node mà đổi tượng HtmlNodeCollection quản lý Phương thức:

Clear(): xóa bỏ toàn bộ danh sách phần tử.

Remove(index): xóa bỏ phần tử tại vị trí index trong danh sách node.

Replace(index,node): thay thế node tại vị trí index trong danh sách node bằng một node khác.

Insert(index,node): chèn một node vào vị trí index trong danh sách node.

Append(node): chèn một node vào cuối danh sách node.

Prepend(node): chèn một node vào đầu danh sách node. HtmlNodeCollection - Items: ArrayList

- Parentnode: HtmlNode + Clear()

+ Remove(index: integer)

+ Replace(index: integer, node: HtmlNode) + Insert(index: integer, node: HtmlNode) + Append(node: HtmlNode)

+ Prepend(node: HtmlNode) …..

4.5.6.7. HtmlAttributeCollection

Lớp này cũng sử dụng giao diện System.Collections.Ienumerable

HtmlAttributeCollection : Ienumerable

Lp HtmlAttributeCollection

Thuộc tính:

Items: danh sách các thuộc tính

Ownernode: node mà danh sách thuộc tính này thuộc về

Phương thức:

Append(newAttribute): chèn một thuộc tính mới vào cuối danh sách thuộc tính với tham sốđầu vào là một đối tượng HtmlAttribte.

Append(name): chèn một thuộc tính mới vào cuối danh sách thuộc tính với tham sốđầu vào là tên của thuộc tính.

Append(name, value): chèn một thuộc tính mới vào cuối danh sách thuộc tính với tham sốđầu vào là tên và giá trị của thuộc tính.

Prepend(newAttribute): chèn một thuộc tính mới vào đầu danh sách thuộc tính với tham sốđầu vào là một đối tượng HtmlAttribte.

RemoveAt(index): xóa bỏ một phần tử trong danh sách thuộc tính tại vị trí index.

Remove(attribute): loại bỏ một thuộc tính với tham số đầu vào là một đối tượng thuộc tính.

Remove(name): loại bỏ một thuộc tính trong danh sách với tham sốđầu vào là tên thuộc tính.

RemoveAll(): xóa bỏ tất cả các thuộc tính trong danh sách.

GetAttributeIndex(attribute): lấy vị trí của thuộc tính trong danh sách với tham số đầu vào là đối tượng HtmlAttribute.

GetAttributeIndex(name): lấy vị trí của thuộc tính trong danh sách với tham sốđầu vào là tên thuộc tính.

Clear(): xóa bỏ toàn bộ danh sách thuộc tính.

HtmlAttributeCollection - Items: ArrayList

- Ownernode: HtmlNode

+ Append(newAttribute: HtmlAttribue) + Append(name: string)

+ Append(name: string, value: string) + Prepend(newAttribute: HtmlAttribute) + RemoveAt(index: integer) + Remove(attribute: HtmlAttribute) + Remove(name: string) + RemoveAll() + GetAttributeIndex(attribute: HtmlAttribute) + Clear() …..

Một phần của tài liệu TÌM HIỂU HTML và CÔNG NGHỆ XML xây DỰNG TRÌNH BIÊN DỊCH HTML SANG XML (Trang 79 - 86)

Tải bản đầy đủ (PDF)

(109 trang)