【问题】
在折腾用Saxon将Docbook编译为webhelp的过程中,出错:
Administrator@K470 /cygdrive/e/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/webhelp $ ant webhelp -Doutput-dir=test-ouput Unable to locate tools.jar. Expected to find it in D:\Program Files\Java\jre7\lib\tools.jar Buildfile: E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\build.xml validate: clean: chunk: [mkdir] Created dir: E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\test-ouput [xslt] Processing E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\docsrc\readme.xml to E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\test-ouput\null626727916 [xslt] Loading stylesheet E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\profiling\profile.xsl [xslt] Processing E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\test-ouput\null626727916 to E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\test-ouput\null1178824252 [xslt] Loading stylesheet E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\xsl\webhelp.xsl [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/autoidx.xsl: line 548: 属性 'href' 在元素外部。 [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/autoidx.xsl: line 597: 属性 'href' 在元素外部。 [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/autoidx.xsl: line 597: 属性 'href' 在元素外部。 [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/autoidx.xsl: line 621: 属性 'href' 在元素外部。 [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/autoidx.xsl: line 621: 属性 'href' 在元素外部。 [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/lists.xsl: line 817: 属性 'type' 在元素外部。 [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/callout.xsl: line 110: 属性 'href' 在元素外部。 [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/xref.xsl: line 182: 属性 'href' 在元素外部。 [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/xref.xsl: line 967: 属性 'href' 在元素外部。 [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/formal.xsl: line 210: 属性 'id' 在元素外部。 [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/formal.xsl: line 421: 属性 'id' 在元素外部。 [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/htmltbl.xsl: line 23: 属性 'id' 在元素外部。 [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/inline.xsl: line 97: 属性 'href' 在元素外部。 [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/inline.xsl: line 97: 属性 'href' 在元素外部。 [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/inline.xsl: line 132: 属性 'href' 在元素外部。 [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/inline.xsl: line 132: 属性 'href' 在元素外部。 [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/inline.xsl: line 172: 属性 'href' 在元素外部。 [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/inline.xsl: line 172: 属性 'href' 在元素外部。 [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/inline.xsl: line 694: 属性 'href' 在元素外部。 [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/inline.xsl: line 911: 属性 'href' 在元素外部。 [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/inline.xsl: line 1028: 属性 'href' 在元素外部。 [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/inline.xsl: line 1158: 属性 'href' 在元素外部。 [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/inline.xsl: line 1158: 属性 'href' 在元素外部。 [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/inline.xsl: line 1258: 属性 'href' 在元素外部。 [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/inline.xsl: line 1296: 属性 'href' 在元素外部。 [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/glossary.xsl: line 325: 属性 'href' 在元素外部。 [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/glossary.xsl: line 325: 属性 'href' 在元素外部。 [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/glossary.xsl: line 395: 属性 'href' 在元素外部。 [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/glossary.xsl: line 395: 属性 'href' 在元素外部。 [xslt] : Warning! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/xhtml/annotations.xsl: line 108: 属性 'onClick' 在元素外部。 [xslt] : Error! file:/E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/webhelp/xsl/webhelp.xsl: line 8: '[variable(chunk.hierarchy)]' 中存在循环变量/参数引用。 [xslt] : Fatal Error! 无法编译样式表 [xslt] Failed to process E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\test-ouput\null626727916 BUILD FAILED E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\build.xml:61: Fatal error during transformation Total time: 6 seconds
【解决过程】
1. 去搜:
Warning xhtml/autoidx.xsl 属性 ‘href’ 在元素外部
Warning autoidx.xsl 属性 ‘href’ 在元素外部
Warning autoidx.xsl 属性 href 在元素外部
等等,都搜不到相关帖子
2. 后来去google搜:
ant webhelp autoidx.xsl href
倒是找到了对应的英文的错误的版本:
Attribute ‘href’ outside of element
比如这里:
[docbook-apps] Getting errors trying to convert docbook to webhelp
其遇到了和我同样的错误。
3. 然后按照回答者的提示,去把saxon9he.jar换回saxon65.jar,即把:
xslt-processor-classpath=/cygdrive/e/Dev_Tools/saxon/SaxonHE9-4-0-4J/saxon9he.jar
换为:
xslt-processor-classpath=/cygdrive/e/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/extensions/saxon65.jar
4.再去试试。结果错误依旧。
同时注意到了,遇到同样问题的那位:
Getting errors trying to convert docbook to webhelp
所用环境,和我的是基本一样的:
ant 1.8.4
saxon65.jar
docbook-xsl-1.77.0(我的是docbook-xsl-ns-1.77.0)
对此错误,另外一个回答者说要确保是saxon-6.5.5.jar,然后才注意到,我此处用docbook-xsl-ns-1.77.0中的是saxon65.jar,不知道是否和教程中的Saxon 6.5.x是一样的。
5. 所以再去下载Saxon 6.5.x,注意实际上是跳转到
http://sourceforge.net/projects/saxon/files/saxon6/6.5.5/
去下载saxon6-5-5.zip的,然后下载下来saxon-6-5-5.zip,解压后,是一堆文档加上saxon.jar,saxon-jdom.jar,saxon-xml-apis.jar。
然后拷贝saxon6.jar到docbook-xsl-ns-1.77.0/extensions/下,并改名为saxon-6.5.5.jar,然后修改配置为:
xslt-processor-classpath=/cygdrive/e/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/extensions/saxon-6.5.5.jar
再去试试。
6.结果问题依旧。
然后把saxon-jdom.jar,saxon-xml-apis.jar也拷贝到该文件夹下,再试试,同样问题依旧。
很明显,是saxon和现在的1.77.0的docbook的各种xsl等文件,不匹配了。
但是现在也不清楚如何修改。
因为去看了第一个错误所在,autoidx.xsl的548行,但是发现内容是好好的,xml的内容和结构都是正常的,没什么错误,所以还是不懂此处的错误的具体含义,没法解决问题。
7.突然想起来了,不知道是否有可能是xercesImpl.jar和
xml-apis.jar
的问题,也许两者的版本和教程中所期望的不一样?
8.这人也遇到类似问题了:
Error messages when building webhelp
但是也没有说如何解决。
9。后来找到这里的解释,说问题原因在于没有安装3,4两步配置好那些jar,但是此处的确已经配置好啦。
后来想了想,难道是由于路径不是cygwin的路径,而是windows的路径?
所以把:
xslt-processor-classpath=/cygdrive/e/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/extensions/saxon-6.5.5.jar xercesImpl.jar=/cygdrive/e/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/extensions/xercesImpl.jar xml-apis.jar=/cygdrive/e/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/extensions/xml-apis.jar
换为:
xslt-processor-classpath=E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\extensions\saxon-6.5.5.jar xercesImpl.jar=E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\extensions\xercesImpl.jar xml-apis.jar=E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\extensions\xml-apis.jar
再去试试,结果错误依旧。
10.再去换为windows的路径,但是路径中分隔符是UNIX中的/,因为之前曾经记得,好像cygwin中,对于windows的路径,是可以识别这种的:
xslt-processor-classpath=E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/extensions/saxon-6.5.5.jar xercesImpl.jar=E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/extensions/xercesImpl.jar xml-apis.jar=E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/extensions/xml-apis.jar
试试,结果,就可以正常编译了:
Administrator@K470 /cygdrive/e/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/webhelp $ ant webhelp -Doutput-dir=test-ouput Unable to locate tools.jar. Expected to find it in D:\Program Files\Java\jre7\lib\tools.jar Buildfile: E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\build.xml validate: clean: [delete] Deleting directory E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\test-ouput chunk: [mkdir] Created dir: E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\test-ouput [xslt] Processing E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\docsrc\readme.xml to E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\test-ouput\null152638183 [xslt] Loading stylesheet E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\profiling\profile.xsl [xslt] Processing E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\test-ouput\null152638183 to E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\test-ouput\null1467394249 [xslt] Loading stylesheet E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\xsl\webhelp.xsl [xslt] language: en [xslt] Writing test-ouput/content/ch01.html for chapter [xslt] Writing test-ouput/content/ch02s01.html for section [xslt] Writing test-ouput/content/ch02s02.html for section [xslt] Writing test-ouput/content/ch02s03.html for section [xslt] Writing test-ouput/content/ch02s04.html for section [xslt] Writing test-ouput/content/ch02s05.html for section [xslt] Writing test-ouput/content/ch02.html for chapter [xslt] Writing test-ouput/content/ch03s01.html for section [xslt] Writing test-ouput/content/ch03s02.html for section [xslt] Writing test-ouput/content/ch03.html for chapter [xslt] Writing test-ouput/content/ch04.html for chapter [xslt] Writing test-ouput/content/index.html for book [xslt] Writing test-ouput/index.html [xslt] Writing test-ouput/content/search/l10n.js [copy] Copying 92 files to E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\test-ouput [copy] Copying 1 file to E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\test-ouput\content index: [copy] Copying 1 file to E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\test-ouput [copy] Copied 1 empty directory to 1 empty directory under E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\test-ouput [copy] Copying 4 files to E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\test-ouput [echo] Indexing html files in test-ouput/content [java] Stemming enabled [java] The created index files are located in test-ouput\content\search\.js [java] Delay = 1 seconds webhelp: BUILD SUCCESSFUL Total time: 8 seconds
真不容易啊。
【总结】
用saxon编译webhelp时,如果出现
autoidx.xsl: line 548: 属性 ‘href’ 在元素外部 / Attribute ‘href’ outside of element
之类的错误,那么需要:
1. 确保使用的是6.5.5版本的saxon,而不是其他版本的
(1)所谓6.5.5版本的saxon,就是通过去saxon6 – 6.5.5下载下来的saxon6-5-5.zip再解压所得到的那个saxon.jar。
(2)其他的版本都会出错,比如我下载的最新的9.4.0.4版本的saxon9he.jar,docbook-xsl-ns-1.77.0/extensions下面的那个自带的saxon65.jar等等,都是会出现错误的,所以都是不能用的。
2. 确保xslt-processor-classpath,xercesImpl.jar,xml-apis.jar的路径正确
在确保使用了正确的6.5.5版本的saxon的基础上,如果上述路径设置错误,则也会出现错误。
而路径正确与否,相信多数人,在linux/unix环境下,有了对应的jar之后,将对应的路径地址设置过来,就不会出现错误的。
但是需要注意的是,如果是和我一样,是在win7+cygwin下使用ant的话,则对应的路径,一定要设置为类似于下面的这种:
xslt-processor-classpath=E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/extensions/saxon-6.5.5.jar xercesImpl.jar=E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/extensions/xercesImpl.jar xml-apis.jar=E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/extensions/xml-apis.jar
即路径是,在普通windows中的路径(分隔符为反斜杠’\’)的基础上:
E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\extensions
把反斜杠’\’换为linux/unix下的斜杠’/’所得到的地址:
E:/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/extensions
因为这样的地址:
(1)windows中,本身也是识别的,比如在资源管理器中输入该地址,也是可以打开对应文件夹的。
(1)cygwin中对其也是兼容的,可以正确识别的。
相反,如果上面的路径设置为:
(1)cygwin中的路径:/cygdrive/e/Dev_Root/docbook/tools/docbook-xsl-ns-1.77.0/extensions
(2)windows中的路径:E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\extensions
则都会导致cygwin中使用ant时,找不到对应的saxon等jar包,而出现上述的“属性 ‘href’ 在元素外部”错误。
这些总结,也是我折腾了足够长的时间,才清楚的。
额外提示:
(1)如果是在windows的cmd下使用ant,估计路径是本身windows的路径即可,具体情况自己去试试,我暂时没折腾。
(2)关于用saxon编译docbook为webhelp的教程,目前已发现有多种,详情可去参考这里:用Saxon将Docbook编译为webhelp
(3)如果有其他错误,要注意教程中所写的一句话:
The Saxon 6.5 jar should not be in your
CLASSPATH
when you generate the webhelp output. If you have any problems, try running ant with an emptyCLASSPATH
.
即,如果是在最后使用ant编译webhelp时,记得CLASSPATH中一定不要有对应的那个6.5.5的saxon的jar包。
转载请注明:在路上 » 【已解决】用saxon编译docbook为webhelp过程中,使用ant出错:属性 ‘href’ 在元素外部 / Attribute ‘href’ outside of element