最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【已解决】docbook中用ant编译webhelp时出错:[xslt] : Error! com.sun.org.apache.xml.internal.utils.WrappedRuntimeException: xxx\null (系统找不到指定的文件。)

Docbook crifan 2016浏览 0评论

【问题】

当前已有一个名为arm_vs_mips的book的docbook的xml源码,主文件arm_vs_mips.xml中包含了子文件:

<xi:include href="glossary.xml"/>
<xi:include href="ch01_reduced_instruction_set.xml"/>
<xi:include href="reference.xml"/>

而子文件ch01_reduced_instruction_set.xml的头部包含了entity的定义:

<!DOCTYPE chapter
[
<!ENTITY % crl_ent PUBLIC "crl.ent" 'null'>%crl_ent;
]>

 

现在想要对此docbook源码去用ant编译webhelp。

在编译过程中,已经解决了xinclude的问题,但是又出现其他错误:

chunk:
    [mkdir] Created dir: E:\Dev_Root\docbook\dev\books\arm_vs_mips\output\webhelp
     [xslt] Processing E:\Dev_Root\docbook\dev\books\arm_vs_mips\src\arm_vs_mips.xml to E:\Dev_Root\docbook\dev\books\arm_vs_mips\output\webhelp\null755571863
     [xslt] Loading stylesheet E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\profiling\profile.xsl
     [xslt] : Error! E:\Dev_Root\docbook\dev\books\arm_vs_mips\src\null (系统找不到指定的文件。)
     [xslt] : Error! com.sun.org.apache.xml.internal.utils.WrappedRuntimeException: E:\Dev_Root\docbook\dev\books\arm_vs_mips\src\null (系统找不到指定的文件。)
     [xslt] Failed to process E:\Dev_Root\docbook\dev\books\arm_vs_mips\src\arm_vs_mips.xml

BUILD FAILED
E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\build.xml:35: javax.xml.transform.TransformerException: javax.xml.transform.TransformerException: com.sun.org.apache.xml.internal.utils.WrappedRuntimeException: E:\Dev_Root\docbook\dev\books\arm_vs_mips\src\null (系统找不到指定的文件。)
        at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(Unknown Source)
        at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(Unknown Source)
        at org.apache.tools.ant.taskdefs.optional.TraXLiaison.transform(TraXLiaison.java:195)
        at org.apache.tools.ant.taskdefs.XSLTProcess.process(XSLTProcess.java:853)
        at org.apache.tools.ant.taskdefs.XSLTProcess.execute(XSLTProcess.java:389)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
        at org.apache.tools.ant.Task.perform(Task.java:348)
        at org.apache.tools.ant.Target.execute(Target.java:392)
        at org.apache.tools.ant.Target.performTasks(Target.java:413)
        at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
        at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
        at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
        at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
        at org.apache.tools.ant.Main.runBuild(Main.java:811)
        at org.apache.tools.ant.Main.startAnt(Main.java:217)
        at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
        at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)
Caused by: javax.xml.transform.TransformerException: com.sun.org.apache.xml.internal.utils.WrappedRuntimeException: E:\Dev_Root\docbook\dev\books\arm_vs_mips\src\null (系统找不到指定的文件。)

 

【解决过程】

1.看起来,应该是由于ch01_reduced_instruction_set.xml中又包含了这样的内容:

<!DOCTYPE chapter
[

<!ENTITY % crl_ent PUBLIC "crl.ent" 'null'>%crl_ent;

]>

导致此错误的。

2.当时,为了使得ant可以继续编译,而临时性地把上述代码中的:

<!ENTITY % crl_ent PUBLIC "crl.ent" ‘null’>%crl_ent;

给删除了,使得ant暂时可以继续编译。只不过又导致了其他错误。

3. 后来经过

【已解决】docbook中用ant编译webhelp时出错:[xslt] : Error! com.sun.org.apache.xml.internal.utils.WrappedRuntimeException: Error attempting to parse XML file (href=’xxx.xml’).

的折腾,把原先的不好的,不准确,不严谨的写法:

<!ENTITY % crl_ent PUBLIC "crl.ent" ‘null’>%crl_ent;

参考了官网的写法,去改为正确的ENTITY写法:

<!ENTITY % crl_ent SYSTEM "E:/Dev_Root/docbook/dev/config/entity/crl.ent"> %crl_ent;

如此,就可以正确编译了:

Administrator@K470 /cygdrive/e/Dev_Root/docbook/dev/books/arm_vs_mips/src
$ ant webhelp --execdebug
exec "/cygdrive/d/Program Files/Java/jre7/bin/java" -classpath "E:/dev_install_root/apache_ant/apache-ant-1.8.4/lib/ant-launcher.jar" -Dant.home="E:/dev_install_root/apache_ant/apache-ant-1.8.4" -Dant.library.dir="E:/dev_install_root/apache_ant/apache-ant-1.8.4/lib" -Dcygwin.user.home="E:/dev_install_root/cygwin/home/Administrator" org.apache.tools.ant.launch.Launcher -cp ".;D:/Program Files/Java/jre7/lib" "webhelp"
Unable to locate tools.jar. Expected to find it in D:\Program Files\Java\jre7\lib\tools.jar
Buildfile: E:\Dev_Root\docbook\dev\books\arm_vs_mips\src\build.xml

validate:

clean:
   [delete] Deleting directory E:\Dev_Root\docbook\dev\books\arm_vs_mips\output\webhelp

chunk:
    [mkdir] Created dir: E:\Dev_Root\docbook\dev\books\arm_vs_mips\output\webhelp
     [xslt] Processing E:\Dev_Root\docbook\dev\books\arm_vs_mips\src\arm_vs_mips.xml to E:\Dev_Root\docbook\dev\books\arm_vs_mips\output\webhelp\null2006722743
     [xslt] Loading stylesheet E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\profiling\profile.xsl
     [xslt] Processing E:\Dev_Root\docbook\dev\books\arm_vs_mips\output\webhelp\null2006722743 to E:\Dev_Root\docbook\dev\books\arm_vs_mips\output\webhelp\null89337553
     [xslt] Loading stylesheet E:\Dev_Root\docbook\tools\docbook-xsl-ns-1.77.0\webhelp\xsl\webhelp.xsl
     [xslt] language: zh
     [xslt] Writing ../output/webhelp/content/glossary.html for glossary(glossary)
     [xslt] Writing ../output/webhelp/content/ch01s01.html for sect1
     [xslt] Writing ../output/webhelp/content/ch01s02.html for sect1
     [xslt] Writing ../output/webhelp/content/ch01_reduced_instruction_set.html for chapter(ch01_reduced_instruction_set)
     [xslt] Writing ../output/webhelp/content/reference.html for bibliography(reference)
     [xslt] Writing ../output/webhelp/content/index.html for book
     [xslt] Writing ../output/webhelp/index.html
     [xslt] Writing ../output/webhelp/content/search/l10n.js
     [copy] Copying 92 files to E:\Dev_Root\docbook\dev\books\arm_vs_mips\output\webhelp
     [copy] Copying 1 file to E:\Dev_Root\docbook\dev\books\arm_vs_mips\output\webhelp\content

index:
     [copy] Copying 1 file to E:\Dev_Root\docbook\dev\books\arm_vs_mips\output\webhelp
     [copy] Copied 1 empty directory to 1 empty directory under E:\Dev_Root\docbook\dev\books\arm_vs_mips\output\webhelp
     [copy] Copying 2 files to E:\Dev_Root\docbook\dev\books\arm_vs_mips\output\webhelp
     [echo] Indexing html files in ../output/webhelp/content
     [java] Stemming disabled
     [java] The created index files are located in ..\output\webhelp\content\search\.js
     [java] Delay = 304 milliseconds

webhelp:

BUILD SUCCESSFUL
Total time: 4 seconds

 

后经证明,解决了此处的ENTITY的写法,也就不会导致后面出现的那个:

     [xslt] : Error! Error attempting to parse XML file (href='ch01_reduced_instruction_set.xml').
     [xslt] : Error! com.sun.org.apache.xml.internal.utils.WrappedRuntimeException: Error attempting to parse XML file (href='ch01_reduced_instruction_set.xml').

的错误了。

4.然后再去试试,此写法,xsltproc是否支持。

结果证明也是可以的,xsltproc也完全支持这种写法。

 

5。反过来想想,其实最开始使用<!ENTITY % crl_ent PUBLIC "crl.ent" ‘null’>%crl_ent; 的写法,完全是参考网上某人的的做法。

到目前为止,觉得其教程写的还凑合,就是教大家用这种写法,是极其的不好。

除了此处导致WrappedRuntimeException外,之前试过的一些所见即所得的Docbook编辑器中,也会导致很多错误的。

即别人常用软件,也不支持此null的写法的,应该还是用上面的,参考docbook官网的写法,才是比较好的。

6.事情做到这一步,其实一般人就够用了。

只是我这里需要实现高度的可移植性,所以不希望在xml文件中出现绝对路径。

所以希望把上面的:

E:/Dev_Root/docbook/dev/config/entity/crl.ent

通过catalog定义成一个变量,这样就可以方便地实现即使改变了docbook的编译环境,也会影响到xml源码,即不需要改动xml源码了。

 

7. 此处,暂时先去试试,使用相对路径,即改为:

<!ENTITY % crl_ent SYSTEM "../../../config//entity/crl.ent">

%crl_ent;

看看能否工作。

8. 测试结果是:

xsltproc,是支持的。

ant webhelp,也是支持的。

所以,暂时的解决办法是,可以使用相对路径,来实现一定程度上的,更换docbook编译环境,而不需要改变docbook的xml源码的目的。

其中只要保持更换后的docbook文件夹的相对位置不变即可。这也是我当前本身就已经满足的:有多个(2,3个)docbook的编译环境,每个环境的文件夹和文件的位置都是一定的,只是总体上的docbook开发环境的根目录不同而已。所以,这样做,暂时也就够了。

9.等以后再去折腾,用catalog实现将xml中ENTITY定义的文件,变成变量,以实现高度的可移植性。

 

【总结】

ant编译webhelp出现:

[xslt] : Error! com.sun.org.apache.xml.internal.utils.WrappedRuntimeException: E:\Dev_Root\docbook\dev\books\arm_vs_mips\src\null (系统找不到指定的文件。)

的错误的原因是,对于entity的错误写法:

<!ENTITY % crl_ent PUBLIC "crl.ent" 'null'>%crl_ent;
(其中,上述不好的写法是参考了别人的教程所导致的,可见,在学习东西时,是否选对了老师,是多么的重要啊。。。)
正确的ENTITY的写法是把PUBLIC换为SYSTEM,不要使用null,即:
<!ENTITY % crl_ent SYSTEM "../../../config/entity/crl.ent"> %crl_ent; 

即完整的头部定义变为:

<!DOCTYPE chapter
[
<!-- <!ENTITY % crl_ent PUBLIC "crl.ent" 'null'>%crl_ent; -->

<!ENTITY % crl_ent SYSTEM "../../../config/entity/crl.ent">
%crl_ent;
]>

 

【相关帖子】

而对于后来出现的"Error attempting to parse XML file"问题,是经过了一番折腾,而且是极其繁琐,艰难的折腾,最终才找到错误原因,关于该问题的详细折腾过程参见:

【已解决】docbook中用ant编译webhelp时出错:[xslt] : Error! com.sun.org.apache.xml.internal.utils.WrappedRuntimeException: Error attempting to parse XML file (href=’xxx.xml’).

转载请注明:在路上 » 【已解决】docbook中用ant编译webhelp时出错:[xslt] : Error! com.sun.org.apache.xml.internal.utils.WrappedRuntimeException: xxx\null (系统找不到指定的文件。)

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
82 queries in 0.171 seconds, using 22.33MB memory