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

Aspose.words一 DOM结构的更多相关文章

  1. DOM2级提供的对DOM结构执行深度优先遍历 笔记

    NodeIterator和TreeWalker这2个类型可以基于给定的起点对DOM结构执行深度优先遍历.(我测试用的浏览器是Chrome,介绍说IE不支持DOM遍历,但是不知道最新的IE支持不支持) ...

  2. js实现DOM结构

    /* 编写一段js脚本生成下面的DOM结构.要求使用标准的DOM方法或属性 <div id='example'> <p class='slogan'>淘,你喜欢</p&g ...

  3. React虚拟DOM具体实现——利用节点json描述还原dom结构

    前两天,帮朋友解决一个问题: ajax请求得到的数据,是一个对象数组,每个对象中,具有三个属性,parentId,id,name,然后根据这个数据生成对应的结构. 刚好最近在看React,并且了解到其 ...

  4. 提高测试脚本复用性降低DOM结构引起路径变化的影响

    问题描述 在定位元素时直接复制的xpath. 但是因为下面这些原因导致之前引用的路径失效, 不得不频繁修改脚本重新定位元素, 大降低了脚本的复用性, 也增加了维护的成本: 1. UI修改 (比如增加了 ...

  5. DOM结构及优化

    1.DOM树中三种常见的DOM节点: 1>元素节点:上图中<a>,<h1>等都是元素节点,即标签 2>文本节点:向用户展示的内容,如...中的"文档标题& ...

  6. datagrid 完整dom结构

    <!-- datagrid的最外层容器,可以使用$(target).datagrid('getPanel')或者$.data(target,'datagrid').panel得到这个DOM对象, ...

  7. jQuery EasyUI Datagrid组件的完整的基础DOM结构

    标题可能有点长,什么叫“完整的基础DOM结构”,这里“基础”的意思是指这个结构不依赖具体数据,不依赖Datagrid的view属性,只要存在Datagrid实例就会存在这样的基础DOM结构:而“完整” ...

  8. 怎样确保页面中的js代码一定是在DOM结构生成之后再调用

    有这样一类问题, 如下所示, 就是在dom结构没有生成时就在js代码中调用了, 此时就会报错: <head> <script> console.log(document.bod ...

  9. App自动化之dom结构和元素定位方式(包含滑动列表定位)

    900×383 38 KB 先来看几个名词和解释: dom: Document Object Model 文档对象模型 dom应用: 最早应用于html和js的交互.界面的结构化描述, 常见的格式为h ...

随机推荐

  1. ubuntu 该软件包现在的状态极为不妥 error

    rm -rf /var/lib/dpkg/info/yourerrorsofware* dpkg --remove --force-remove-reinstreq yourerrorsoftware ...

  2. ADO.NET基础知识

    ADO.NET定义 ADO是ActiveX Data Objects的缩写,ADO.NET是数据库应用程序和数据源之间沟通的桥梁,主要提供一个面向对象的数据访问架构,用来开发数据库应用程序,就是一组类 ...

  3. indexOf实现引申出来的各种字符串匹配算法

    我们在表单验证时,经常遇到字符串的包含问题,比如说邮件必须包含indexOf.我们现在说一下indexOf.这是es3.1引进的API ,与lastIndexOf是一套的.可以用于字符串与数组中.一些 ...

  4. C#中Graphics的画图代码【转】

    我要写多几个字上去 string str = "Baidu"; //写什么字? Font font = Font("宋体",30f); //字是什么样子的? B ...

  5. 吴裕雄 18-MySQL GROUP BY 语句

    GROUP BY 语句根据一个或多个列对结果集进行分组.在分组的列上我们可以使用 COUNT, SUM, AVG,等函数.GROUP BY 语法SELECT column_name, function ...

  6. How to fix the bug “Expected "required", "optional", or "repeated".”?

    参考:https://github.com/tensorflow/models/issues/1834 You need to download protoc version 3.3 (already ...

  7. 学习BOS物流项目第十天

    1 教学计划 1.演示权限demo 2.权限概述 a. 认证 b. 授权 3.常见的权限控制方式 a.  url拦截权限控制 b.  方法注解权限控制 4.创建权限数据模型 a.  权限表 b.  角 ...

  8. 移动端引用echarts的折线图

          移动端写一个图表引用echarts,highcharts插件,本次要找一个能够显示最新数据的折线图,最后只找到显示最大值: 找到echarts的实例:记一下个各功能.   <!DOC ...

  9. CXF使用JMS作为传输协议的配置

    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w ...

  10. 微擎框架下拉分页(使用js模板引擎)

    1.需要分页的页面,引入一下文件 <script language="javascript" src="\addons\{$_GPC['m']}\template\ ...