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 |
代表一个词汇表文档,如构件,自动图文集或一个自动更正条目 |
Text |
一个文本段落,保护内联的节点 |
|
Text |
一个格式一致的文本块 |
|
Text |
一个书签的起点标记 |
|
Text |
一个书签的结束标记 |
|
Text |
一个特殊的字符指定一个单词字段的开始 |
|
Text |
单词字段的分隔符 |
|
Text |
一个特殊的字符指定一个单词字段的结束 |
|
Text |
一个表单字段 |
|
Text |
特殊字符类型,没有具体的 |
|
Tables |
Word文档中的表格 |
|
Tables |
一个表格对象的行 |
|
Tables |
表格行的单元格 |
|
Shapes |
Word文档中的图像,形状,文本框或者OLE对象 |
|
Shapes |
一组Shapes对象 |
|
Shapes |
一个文档中的Sharp或者图像,图表 |
|
Annotations |
文档中包括文本的脚注或者尾注 |
|
Annotations |
文档中包含文本的注释 |
|
Annotations |
一个相关的注释区域的开始 |
|
Annotations |
一个相关的注释区域的结束 |
|
Markup |
在一个段落内围绕一个或多个内嵌结构的智能标记 |
|
Markup |
文档中的某些结构的自定义XML标记 |
|
Markup |
文档中的一种结构化的文档标签(内容控制) |
|
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结构的更多相关文章
- DOM2级提供的对DOM结构执行深度优先遍历 笔记
NodeIterator和TreeWalker这2个类型可以基于给定的起点对DOM结构执行深度优先遍历.(我测试用的浏览器是Chrome,介绍说IE不支持DOM遍历,但是不知道最新的IE支持不支持) ...
- js实现DOM结构
/* 编写一段js脚本生成下面的DOM结构.要求使用标准的DOM方法或属性 <div id='example'> <p class='slogan'>淘,你喜欢</p&g ...
- React虚拟DOM具体实现——利用节点json描述还原dom结构
前两天,帮朋友解决一个问题: ajax请求得到的数据,是一个对象数组,每个对象中,具有三个属性,parentId,id,name,然后根据这个数据生成对应的结构. 刚好最近在看React,并且了解到其 ...
- 提高测试脚本复用性降低DOM结构引起路径变化的影响
问题描述 在定位元素时直接复制的xpath. 但是因为下面这些原因导致之前引用的路径失效, 不得不频繁修改脚本重新定位元素, 大降低了脚本的复用性, 也增加了维护的成本: 1. UI修改 (比如增加了 ...
- DOM结构及优化
1.DOM树中三种常见的DOM节点: 1>元素节点:上图中<a>,<h1>等都是元素节点,即标签 2>文本节点:向用户展示的内容,如...中的"文档标题& ...
- datagrid 完整dom结构
<!-- datagrid的最外层容器,可以使用$(target).datagrid('getPanel')或者$.data(target,'datagrid').panel得到这个DOM对象, ...
- jQuery EasyUI Datagrid组件的完整的基础DOM结构
标题可能有点长,什么叫“完整的基础DOM结构”,这里“基础”的意思是指这个结构不依赖具体数据,不依赖Datagrid的view属性,只要存在Datagrid实例就会存在这样的基础DOM结构:而“完整” ...
- 怎样确保页面中的js代码一定是在DOM结构生成之后再调用
有这样一类问题, 如下所示, 就是在dom结构没有生成时就在js代码中调用了, 此时就会报错: <head> <script> console.log(document.bod ...
- App自动化之dom结构和元素定位方式(包含滑动列表定位)
900×383 38 KB 先来看几个名词和解释: dom: Document Object Model 文档对象模型 dom应用: 最早应用于html和js的交互.界面的结构化描述, 常见的格式为h ...
随机推荐
- Haskell语言学习笔记(78)fix
fix 函数 fix 是一个在 Data.Function 模块中定义的函数,它是对于递归的封装,可以用于定义不动点函数. fix :: (a -> a) -> a fix f = let ...
- 开发JSP自定义标签
互联网上有很多种自定义标签,今天学的这种非常简单哟 1 编写一个普通类在类中定义一个经常使用得到的 函数 如public String toUpper(String str){ ...... } 2 ...
- 2.Servlet基础.md
目录 1.定义 2.特点 3.手动编写一个Servlet 3.1创建一个Servlet类 3.2找到编写类的class文件,将这个类的整个包拷贝到一个web应用中的WEB-INF/classes目录下 ...
- thread == 票池
public class ThreadDemo2 { public static void main(String[] args){ TicketPool tp = new TicketPool(); ...
- JAVA JDK配置
配置环境变量_jdk 1.右键选择[计算机]——[属性] ——[左上角的高级系统设置] 2.点击[环境变量] 3.在[系统变量]里点击[新建], 变量名填写JAVA_HOME,变量值填写JDK的安装路 ...
- tensorflow中run和eval的区别(转)
在tensorflow中,eval和run都是获取当前结点的值的一种方式. 在使用eval时,若有一个 t 是Tensor对象,调用t.eval()相当于调用sess.run(t) 一下两段代码等效: ...
- MATLAB总结二
1.如何将一个多项式中的系数按照幂次提取出来? sym2poly(ans) %ans为一个多项式. 2.在写第二份模式识别的大作业时遇到如下困难: 每个样本贡献给总概率的是一个关于x的表达式,我将所有 ...
- mysql 在登陆的时候出现error 1045 (28000): 错误解决办法
错误显示:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 解决方案: 1.找到配 ...
- js 中的正则表达式RegExp
1.RegExp对象 1.1 RegExp对象实例的创建 正则表达式模式: g:表示全局模式,即模式将被用于整个字符串,而非发现第一个匹配项时立即停止: i:表示不区分大小写,忽略大小 ...
- db2 性能查看top sql
DB2 V10.3 查看top sql ,类似oracle 这篇文章是对之前有篇db2 v9的简化更新,总体还是觉得DB2TOP比较好用直观,不过需要导出SQL时,或自动化脚本时,还是建议执行S ...