【问题】
在折腾用Saxon将Docbook编译为webhelp的过程中,出错:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | 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的路径?
所以把:
1 2 3 | 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 |
换为:
1 2 3 | 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的路径,是可以识别这种的:
1 2 3 | 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 |
试试,结果,就可以正常编译了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | 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的话,则对应的路径,一定要设置为类似于下面的这种:
1 2 3 | 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