云自无心水自闲

天平山上白云泉,云自无心水自闲。何必奔冲山下去,更添波浪向人间!
posts - 288, comments - 524, trackbacks - 0, articles - 6
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

最近在搞一个把DocBook的Xml文档转换成Html的工作。
遇到了一些问题,把解决的心得总结一下写在这里。

首先介绍一下DocBook的由来,DocBook是一个开源项目,其实就是一些DTD,规定了书写文档的一些标准。
在此标准下,就可以抛弃Word,WPS之类的工具用写字板来写文档了。
文档此Xml形式保存,需要的时候就使用Xslt通过已有的大量的各种各样的Xsl转换成所需要的格式,比如:RTF,PDF,HTML等等。
这种方式带来了比较大的自由和灵活性。很多人对用这种方式写文档非常推崇。
DocBook网站:http://www.docbook.org, http://docbook.sf.net
讲解DocBook Xsl的一个很好网站:http://www.sagehill.net/docbookxsl
O'reilly出版一本DocBook的书(免费) http://www.oreilly.com/catalog/docbook/chapter/book/docbook.html
DocBook百科全书: http://wiki.docbook.org/topic


遇到的一个主要问题是原来的DocBook就是想把一个Docbook文档中的章节拆分转换生成若干个Html.
查阅文档后得知使用html\chunk.xsl可以实现此功能。
OK,下载Saxon,用Exe4Java生成Windwos平台下的EXE文件后,进行转换。

Good,果然生成了一堆Html,不过为什么Html的文件都是些ch0X.html这样的格式?
再查阅文档,原来这是DocBook的生成规则,第一章生成的Html就取名为ch01.html,
Sect1生成s01,加上所在章节的前缀,如果在第2章,则生成文件名为ch02s01.html,以此类推。
如果想要生成自定义的文件名,就需要在DocBook中指定相应的id属性。如:
<chapter id="workflow">...</chapter>, 那么这一章就会生成workflow.html.

ok, 给DocBook文档中所有章节加上了id属性,指定了文件名。再生成一下。

Faint,失败了,生成的文件名还是老样子?为什么?
再仔细查阅文档,原来在转换的时候少指定了一个参数 use.id.as.filename,
只有此参数值不为0时,上述特性才生效。而缺省值是0.

OK,添加此参数, 执行如下命令:

saxon docbook.xml docbook-xsl-1.69.1\html\chunk.xsl use.id.as.file=1

如果使用xsltproc, 命令格式如下:
xsltproc --stringparam use.id.as.filename 1 ..\docbook-xsl-1.69.1\html\chunk.xsl docbook.xml

Good, 成功了。


最后,推荐一本关于Xslt的好书: Manning - Xslt Quickly, 使用了大量的实例来引导读者一步步,由浅入深逐步学会Xslt




只有注册用户登录后才能发表评论。


网站导航: