前言

Office2003以上,Word可以以XML文本格式存储,这样就可以使用外部程序创建Word文件,而不需要使用Word的对象。也能够自由的打开分析Word文件,或者发布到自己的Web页面,或者其他更多应用。

一个典型的WordXML结构可以是如下的样子:

<?xml version="1.0"?>
<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml">
<w:body>
<w:p>
<w:r>
<w:t>Hello, World.</w:t>
</w:r>
</w:p>
</w:body>
< /w:wordDocument>

image

可以用记事本创建一个文件,将上面的XML内容粘贴,并保存为helloworld.xml,在Office Word中打开它,就能看到如上图所示的内容。

这是最简单的WordXML内容,它包括这几部分:

XML的声明和名称空间的指明:
<?xml version="1.0"?>
<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml">

文档内容

<w:body>…</w:body>

基本节点类型

从body内可以看出,构成实际文本内容的有3种类型节点:
<w:p> 表示一个段落

<w:r> 表示一个样式串,指明它包括的文本的显示样式

<w:t> 表示真正的文本内容

如果我们需要指明一个文本为粗体,需要怎么办呢?

<w:r>
<w:rPr> 
<w:b w:val="on"/>
</w:rPr> 
<w:t> 2.0C</w:t>
< /w:r>

<w:b w:val=”on”> 表示该格式串种的文本为粗体。

这样,我们就知道<w:r>表示一个特定的文本格式,稍微复杂点的格式:

<w:r>
< w:rPr> 
< w:b w:val="on"/>
< w:sz w:val="40"/><w:szCs w:val="40"/>
< w:rFonts w:ascii="Arial" w:eastAsia="Arial" w:hAnsi="Arial" />
< /w:rPr> 
< w:t xml:space="preserve">2.0C</w:t>
< /w:r>

字体为粗体,尺寸为是40除2等于20相当于几号字体?,字体名称“Arial”

<w:t xml:space="preserve"> 2.0C</w:t>

中的xml:space="preserve"从字面上理解是保持空格。

如果没有这内容的话文本的前后空格将会被Word忽略。

如果我们需要指定一个段的对齐方式,行距要怎么办呢?

这就要设置<w:p>的属性了。类似于这样:

<w:p>
< w:pPr>
< w:jc w:val="right"/>
< w:spacing w:line="600" w:lineRule="auto"/>
< /w:pPr>

</w:p>

对齐方向:<w:jc w:val=”right”/> 这儿是右对齐。

行距:<w:spacing w:line=”600” w:lineRule="auto"/> 600是用行距的倍数乘240得出,如果是两倍行距,则是480。这儿应该是2.5倍行距。

由此可见,组装一个WordXML格式的文件是一件比较简单的事情。

将段属性包含在<w:pPr></w:pPr>中

将文本格式包含在<w:rPr></w:rPr>中

这儿的Pr是property的意思,表示这个块中是r(run)或p(paragraph)的格式设置。

一个WordXML的文件结束了吗?可以这样讲,但如果你双击刚才创建的XML文件,有很大机会不会由Word来打开它。

这是为什么呢?

我们还需要在合适的地方放置一条语句:

<?xml version="1.0"?>
<?mso-application progid="Word.Document"?>
<w:wordDocument 

用来指明这个xml文件的对应处理程序,对应注册表中的键值:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\11.0\Common\Filter\text/xml

但是,加入这一条语句后,双击打开时,Word将会提示XML的格式不正确,虽然能打开。那是因为还有许多的内容没有声明。我们就先不加这条语句。

页面设置

下面内容设置了页的宽,高,和页的各边距。各项的值均是英寸乘1440得出:

<w:body>…
<w:sectPr>
<w:pgSz w:w="12240" w:h="15840"/>
<w:pgMar w:top="1440" w:right="1800" w:bottom="1440" w:left="1800" w:header="720" w:footer="720" w:gutter="0"/>
< /w:sectPr>

</w:body>

下面内容设置了页的页眉页脚:

w:sectPr wsp:rsidR="002C452C">
<w:hdr w:type="odd" >
<w:p>
<w:pPr>
<w:pStyle w:val="Header"/>
</w:pPr>
<w:r>
<w:t>My Header</w:t>
</w:r>
</w:p>
</w:hdr>
<w:ftr w:type="odd">
<w:p>
<w:pPr>
<w:pStyle w:val="Footer"/>
</w:pPr>
<w:r>
<w:t>My Footer</w:t>
</w:r>
</w:p>
</w:ftr>

</w:sectPr>
< /w:body>

这两段都很直白,就不需要解释了。

文档设置

</w:body>

<w:docPr>
<w:view w:val="print"/><w:zoom w:percent="100"/>
< /w:docPr>

</w:wordDocument>

docPr,就是document property的意思了。

表示文档的视图是“print”,视图比例100%

完整的XML文件实例

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
< ?mso-application progid="Word.Document"?>
< w:wordDocument xmlns:aml="http://schemas.microsoft.com/aml/2001/core"
xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:w10="urn:schemas-microsoft-com:office:word"
xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml"
xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint"
xmlns:wsp="http://schemas.microsoft.com/office/word/2003/wordml/sp2"
xmlns:sl="http://schemas.microsoft.com/schemaLibrary/2003/core"
w:macrosPresent="no" w:embeddedObjPresent="no" w:ocxPresent="no"
xml:space="preserve">

<w:body>
< w:p>
< w:pPr>
< w:jc w:val="left"/>
< w:spacing w:line="240" w:lineRule="auto"/>
< /w:pPr>
< w:r>
< w:rPr> 
< w:sz w:val="24"/><w:szCs w:val="24"/>
< w:rFonts w:ascii="Arial" w:eastAsia="Arial" w:hAnsi="Arial" />
< /w:rPr> 
< w:t>Niu don't like Red or Blue! It seems that </w:t>
< /w:r>
< w:r>
< w:rPr> 
< w:sz w:val="48"/><w:szCs w:val="48"/>
< w:rFonts w:ascii="Arial" w:eastAsia="Arial" w:hAnsi="Arial" />
< /w:rPr> 
< w:t>Hello world!</w:t>
< /w:r>
< /w:p>
< w:p>

<w:sectPr wsp:rsidR="002C452C">
< w:pgSz w:w="12240" w:h="15840"/>
< w:pgMar w:top="1526.4" w:right="3254.4" w:bottom="2966.4" w:left="1670.4" w:header="720" w:footer="720" w:gutter="0"/>
< w:hdr w:type="odd" >
< w:p>
< w:pPr>
< w:pStyle w:val="Header"/>
< /w:pPr>
< w:r>
< w:t>Header</w:t>
< /w:r>
< /w:p>
< /w:hdr>
< w:ftr w:type="odd">
< w:p>
< w:pPr>
< w:pStyle w:val="Footer"/>
< /w:pPr>
< w:r>
< w:t>Footer</w:t>
< /w:r>
< /w:p>
< /w:ftr>
< /w:sectPr>
< /w:body>

<w:docPr>
< w:view w:val="print"/><w:zoom w:percent="100"/>
< /w:docPr>
< /w:wordDocument>

这样,一个基本的WordXML就创建完成,当然,一个应用级别的Word文档绝对不仅这些内容,更详细的内容需要参考MS Office SDK。

WordXML格式解析相关推荐

  1. freemarker导出word文档——WordXML格式解析

    前不久,公司一个项目需要实现导出文档的功能,之前是一个同事在做,做了3个星期,终于完成了,但是在项目上线之后却发现导出的文档有问题,此时,这个同事已经离职,我自然成为接班者,要把导出功能实现,但是我看 ...

  2. WordXML格式解析(应用于Freemarker导出word文档)

    [WordXML] 项目中有时需要Word文档的导出/预览功能,使用Freemarker工具可以实现,文档的模板为WordXML格式,类似于html语言,不同标签含义不同,以下是经常用到的一些标签和注 ...

  3. 转:YUV RGB 常见视频格式解析

    转: http://www.cnblogs.com/qinjunni/archive/2012/02/23/2364446.html YUV RGB 常见视频格式解析 I420是YUV格式的一种,而Y ...

  4. 【Android RTMP】音频数据采集编码 ( AAC 音频格式解析 | FLV 音频数据标签解析 | AAC 音频数据标签头 | 音频解码配置信息 )

    文章目录 安卓直播推流专栏博客总结 一. AAC 音频格式解析 二. FLV 音频数据标签解析 1. 分析 FLV 格式中的 AAC 音频格式数据 2. AAC 音频特殊配置 3. AAC 音频数据标 ...

  5. java 解析日期格式_日期/时间格式/解析,Java 8样式

    java 解析日期格式 自Java 几乎 开始以来,Java开发人员就通过java.util.Date类(自JDK 1.0起)和java.util.Calendar类(自JDK 1.1起 )来处理日期 ...

  6. 日期/时间格式/解析,Java 8样式

    自Java 几乎 开始以来,Java开发人员就通过java.util.Date类(自JDK 1.0起)和java.util.Calendar类(自JDK 1.1起 )来处理日期和时间. 在这段时间内, ...

  7. 3D模型格式解析(OBJ)

    文章目录 OBJ格式解析 一.OBJ格式 二.vtkOBJReader源码解析 1.主要部分 总结 OBJ格式解析 通过解读vtk源码中对OBJ文件的读取代码,讲解如何获取obj模型的顶点(verte ...

  8. c语言组json包,json格式解析和libjson的用法介绍(关于cjson的使用方法)

    在阅读本文之前,请先阅读下<Rss Reader实例开发之系统设计>一文. Rss Reader实例开发中,进行网络数据交换时主要使用到了两种数据格式:JSON与XML.本文主要介绍JSO ...

  9. mysql binlog c++_MySQL binlog的格式解析

    我搜集到了一些资料,对理解代码比较有帮助. 在头文件中binlog_event.h中,有描述 class Log_event_header class Log_event_footer 参见[Myst ...

最新文章

  1. ABP Zero示例项目问题总结
  2. VF02 会计凭证过账时间
  3. boost::contract模块实现move的测试程序
  4. ubuntu install redis/mongo
  5. 内存恶鬼drawRect
  6. 在ASP.NET MVC应用程序中随机获取一个字符串
  7. Ubuntu上安装visual studio code
  8. Pycharm 简单设置成官方中文版
  9. ubuntu16.04 系统ghostscript 缺少中文语言包导致字体重叠问题
  10. 【董天一】什么是IPFS(三)
  11. Mongodb实验二——分片集群搭建
  12. html中写页边距,html整体页面边距怎么设置
  13. 现在公司都不缺人了?软件测试工作经历3年,面试居然被坑了....
  14. python 浮点数精度不准确_浮点数的 “floor division” (例如在python中)是否会导致精度不准?...
  15. 关于POS操作的一些文章收集链接
  16. if+switch 循环
  17. Java精进-手写持久层框架
  18. python龙格库塔_龙格库塔积分法
  19. 安卓 修改键盘确定按钮状态,并获取对应点击事件
  20. 计算1~100的数之和

热门文章

  1. 使用Docker加速器
  2. 2019年9月22日总结
  3. 想了解大数据的鼻祖Hadoop技术栈,这里有一份优质书单推荐!
  4. CSS - CSS代码格式及使用
  5. 本体(Ontology)概述
  6. Bypass Preventing CSRF
  7. Java中Integer.valueOf()解读
  8. Balluff推出新款长距离RFID读卡器
  9. java 10进制 掩码运算_ipv6子网掩码计算java
  10. 线性代数 -- Linear Algebra with Applications