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>

可以用记事本创建一个文件,将上面的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: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. 基于Spark和SparkSQL的NetFlow流量的初步分析——scala语言

    基于Spark和SparkSQL的NetFlow流量的初步分析--scala语言 标签: NetFlow Spark SparkSQL 本文主要是介绍如何使用Spark做一些简单的NetFlow数据的 ...

  2. FFmpeg 结构体学习(三): AVPacket 分析

    在上文FFmpeg 结构体学习(二): AVStream 分析我们学习了AVStream结构体的相关内容.本文,我们将讲述一下AVPacket. AVPacket是存储压缩编码数据相关信息的结构体.下 ...

  3. FFmpeg 结构体学习(四): AVFrame 分析

    在上文FFmpeg 结构体学习(三): AVPacket 分析我们学习了AVPacket结构体的相关内容.本文,我们将讲述一下AVFrame. AVFrame是包含码流参数较多的结构体.下面我们来分析 ...

  4. FFmpeg 结构体学习(五): AVCodec 分析

    在上文FFmpeg 结构体学习(四): AVFrame 分析我们学习了AVFrame结构体的相关内容.本文,我们将讲述一下AVCodec. AVCodec是存储编解码器信息的结构体.下面我们来分析一下 ...

  5. FFmpeg 结构体学习(六): AVCodecContext 分析

    在上文FFmpeg 结构体学习(五): AVCodec 分析我们学习了AVCodec结构体的相关内容.本文,我们将讲述一下AVCodecContext. AVCodecContext是包含变量较多的结 ...

  6. S2-052 RCE漏洞 初步分析

    PS:初步分析,只是分析了Struts2 REST插件的部分,本来菜的抠脚不敢发,但看到各大中心发的也没比我高到哪里去,索性发出来做个记事! 漏洞描述 2017年9月5日,Apache Struts发 ...

  7. DirectUI的初步分析-转

    DirectUI的初步分析(一) 最近由于项目的需要学习了一下DirectUI方面的东西,主要借鉴的是一个国外程序员写的代码(见引用一),看了后发现它更多的是探讨一种实现的可能性和思路,和实际应用还是 ...

  8. Linux内核分析第三周学习博客——跟踪分析Linux内核的启动过程

    Linux内核分析第三周学习博客--跟踪分析Linux内核的启动过程 实验过程截图: 过程分析: 在Linux内核的启动过程中,一共经历了start_kernel,rest_init,kernel_t ...

  9. Netfilter之连接跟踪实现机制初步分析

    Netfilter之连接跟踪实现机制初步分析 原文: http://blog.chinaunix.net/uid-22227409-id-2656910.html 什么是连接跟踪 连接跟踪(CONNT ...

随机推荐

  1. Linux系统学习笔记之 1 基础命令

    翻看日记,看到以前自己学习Linux是的笔记来了,温故而知新乎.   文件命名规则: 1.除了/之外,所有的字符都合法. 2.有些字符最好不要用,如空格符.制表符.退格符.和@ # & ( ) ...

  2. VS Code - Debugger for Chrome

    VS Code - Debugger for Chrome调试JavaScript的两种方式   VS Code - Debugger for Chrome调试JavaScript的两种方式 最近由于 ...

  3. java.lang.RuntimeException: Unable to start activity ComponentInfo

    异常:java.lang.RuntimeException: Unable to start activity ComponentInfo{com.william/com.william.Result ...

  4. Yet Another Multiple Problem(bfs好题)

    Yet Another Multiple Problem Time Limit : 40000/20000ms (Java/Other)   Memory Limit : 65536/65536K ( ...

  5. android解决内存溢出的问题(没有从根本上解决)

    Android游戏虚拟机算法JNI 尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图,因为这些函数在完 ...

  6. CodeForces 160D - Distance in Tree 树型DP

    题目给了512MB的空间....用dp[k][i]代表以k为起点...往下面走(走直的不打岔)i步能有多少方案....在更新dp[k][i]过程中同时统计答案.. Program: #include& ...

  7. 多个viewpager可能产生的问题

    由于Fragment的方便性,现在很多人开始大量使用Fragment. 今天使用时遇到各问题,记录下来并分享下. 使用Fragment都会用FragmentActivity ,特别是在用到ViewPa ...

  8. ADO.NET详解----核心对象的使用

    一.Connection对象 指定某个具体数据源以及提供登陆方式及用户名与密码. Connection对象的主要成员: 1.ConnectionString属性:连接字符串,指定要操作的数据库以及登录 ...

  9. ##DAY4 事件的基本概念、触摸的基本概念、响应者链、手势

    ##DAY4  事件的基本概念.触摸的基本概念.响应者链.手势 #pragma mark ———————事件的基本概念 ——————————— 事件的基本概念: 1)事件是当用户的手指触击屏幕及在屏幕 ...

  10. 如何最简单的优化MySql

    1.创建索引,一定要根据实际情况来创建,如果是连接表查询,如一个主帐号连接多个子帐号,可以考虑两个或三个以上的多索引: 2.合理利用时间排序,由于大多数表格用时间来排序,数据量相当大的时候,在时间列上 ...