Aspose.words一 DOM結構


2.文檔對象模型概述

2.1 DOM介紹

Aspose.Words的文檔對象模型(以下簡稱DOM)是一個Word文檔在內存中的映射,Aspose.Words的DOM可以編程讀取、操作和修改Word文檔的內容和格式。理解DOM的結構和相應的類型,是使用Aspose.Words靈活編程的基礎,這一點非常重要。下面的一個Word文檔例子和其結構如下圖所示:

當上述文檔被Aspose.Words的DOM讀取時,會創建如下結構的樹形對象:

從上圖的結構和對應的Word文檔,我們可以看到大概的DOM中相關對象的結構,有了這些基本概念,就可以很流程的操作Word文檔了。Document, Section, Paragraph, Table, Shape, Run 以及圖中的其他橢圓形的都是Aspose.Words對象,這些對象具有樹形的層級結構,圖中的注釋同樣說明這些文檔對象樹中的對象具有多個屬性。

Aspose.Words中的DOM有以下特點:

1.所有的節點(node)類最終都繼承於Node類,它是Aspose.Words DOM的基本類型。

2.節點可以包含(嵌套)其他節點,例如Section和Paragraph都繼承自CompositeNode類,而CompositeNode類來源與Node類。

2.2 Node類型

當Aspose.Words讀取Word文檔到內存中時,不同類型的文檔元素被不同的類型對象來替代,每一個文本框的text, paragraph, table, section都是Node對象,甚至文檔本身都是一個Node。Aspose.Words為每一種文檔節點類型都定義了一個類。

下面是一個UML類圖,表示DOM中不同node類型之間的關系。抽象類的名字用斜體表示。注意,Aspose.Words DOM中同樣包括了一些非節點類型的類,例如Style, PageSetup, Font等等,它們沒有在這幅圖里面顯示。

 看看這些主要的類及作用

Aspose.Words類

類別

描述

Document

Document

Document對象是文檔樹的根節點,提供訪問整個文檔的入口

Section

Document

Section對象對應一個文檔中的一節

Body

Document

是一節中的主要文本容器

HeaderFooter

Document

一節中的特殊頁眉或者頁腳容器

GlossaryDocument

Document

代表一個Word文檔中詞匯表的根條目

BuildingBlock

Document

代表一個詞匯表文檔,如構件,自動圖文集或一個自動更正條目

Paragraph

Text

一個文本段落,保護內聯的節點

Run

Text

一個格式一致的文本塊

BookmarkStart

Text

一個書簽的起點標記

BookmarkEnd

Text

一個書簽的結束標記

FieldStart

Text

一個特殊的字符指定一個單詞字段的開始

FieldSeparator

Text

單詞字段的分隔符

FieldEnd

Text

一個特殊的字符指定一個單詞字段的結束

FormField

Text

一個表單字段

SpecialChar

Text

特殊字符類型,沒有具體的

Table

Tables

 Word文檔中的表格

Row

Tables

一個表格對象的行

Cell

Tables

表格行的單元格

Shape

Shapes

Word文檔中的圖像,形狀,文本框或者OLE對象

GroupShape

Shapes

一組Shapes對象

DrawingML

Shapes

一個文檔中的Sharp或者圖像,圖表

Footnote

Annotations

文檔中包括文本的腳注或者尾注

Comment

Annotations

文檔中包含文本的注釋

CommentRangeStart

Annotations

一個相關的注釋區域的開始

CommentRangeEnd

Annotations

一個相關的注釋區域的結束

SmartTag

Markup

在一個段落內圍繞一個或多個內嵌結構的智能標記

CustomXmlMarkup

Markup

文檔中的某些結構的自定義XML標記

StructuredDocumentTag

Markup

文檔中的一種結構化的文檔標簽(內容控制)

OfficeMath

Math

代表Office的數學對象,如函數,方程或者矩陣

 

2.3組成模式

Aspose.Words文檔的結構樹非常重要,下面的設計吐可以更清晰的理解各個節點之間的包含關系。

2.3.1 Document and Section

文檔和節:

從上圖可以看出:

1.一個Document有1個或者多個Section(節)節點;

2.Section有1個Body(正文),沒有或者有多個HeaderFooter節點;

3.Body和HeaderFooter可以包含多個塊級節點;

4.1個Document能夠有一個GlossaryDocument.

1個Word文檔包含1個或多個節,一個節可以定義自己的頁碼,邊距,方向,以及頁眉頁腳的文字;一個節保護主要的問題,如頁眉,頁腳(首頁,奇數頁,偶數頁)。

2.3.2 Block-level節點

Block-level節點的關系圖如下所示:

從上圖中可以看到:

1.Block-level元素可以出現在文檔中的很多地方,如Body的子節點,腳注,評論,單元格其他元素。

2.最重要的Block-level節點是表格和段落;

3.1個表格有0行或者多行;

CustomXmlMarkup 和StructuredDocumentTag可以包含其他Block-level節點;

2.3.3 Inline-level節點

從上面的圖表可以看到下列關系:

1.Paragraph是最經常出現的Inline-level節點;

2.Paragraph可以包含不同的Run格式節點;也可以包含書簽(bookmarks)和注釋(annotations)

3.Paragraph還可以包含形狀,圖像,繪圖對象等,以及智能標簽;

2.3.4 表格行單元格

Table可以包含很多行,行可以包含單元格,單元格可以包括block-level節點。

 2.4 設計模式與導航

Aspose.Words將文檔表示為一個有節點組成的樹,因此就可以在節點之間互相切換。Aspose.Words提供了一個“文檔瀏覽器”(DocumentExplorer),這是一個項目例子Demo。如下圖所示:

可以通過Node類的ParentNode屬性來訪問上級節點,因此很方便獲取父節點。文檔對象模型是有大量的對象組合而成,他們的關系如下:

1.Node類是所有節點類的基類;

2.CompositeNode類是組合節點的基類;

3.Node類的中,沒有子節點管理的接口,子節點管理的方法只出現在CompositeNode;

4.從Node類中移除子節點管理的方法,更干凈,可以減少很多額外的轉換;

 

轉載自:http://www.cnblogs.com/asxinyu/p/3242754.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM