在 DITA OT 1.8.5 中使用插件 com.elovirta.ooxml 将 DITA 转换为 DOCX

Posted

技术标签:

【中文标题】在 DITA OT 1.8.5 中使用插件 com.elovirta.ooxml 将 DITA 转换为 DOCX【英文标题】:DITA to DOCX using plugin com.elovirta.ooxml in DITA OT 1.8.5 【发布时间】:2017-06-01 03:55:44 【问题描述】:

是否可以

输入dita映射文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE map PUBLIC "urn:pubid:org:doctypes:dita:map" "map.dtd">
<map>
    <title>This is a test DITA Map</title>
    <topicref href="Bank.dita"/>
</map>

并输入dita文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE topic
  PUBLIC "urn:pubid:doctypes:dita:topic" "topic.dtd">
<topic id="d63e3" xml:lang="en-US" outputclass="Student_Notebook">
  <title outputclass="Title">Student Notebook</title>
  <body>
    <section outputclass="Handout"><title>Labs Student Notebook
        1</title><p outputclass="SC_P_Large_Center">Module 1</p><p
        outputclass="SC_P_Large_Center">Literacy Labs</p><p outputclass="SC_P_Large_Center">Student
        Notebook</p><p outputclass="SC_P_Medium">________________ _______________ _______________
        _______________ </p></section>
  </body>
</topic>

docx 转换运行后,我得到如下错误日志:

docx.convert:

 >[xslt] Processing E:\Vinod\2017\Jan\4-1\temp\docx\oxygen_dita_temp\Test_MERGED.xml to E:\Vinod\2017\Jan\4-1\temp\docx\oxygen_dita_temp\Test_CLEANED.xml
 [xslt] Loading stylesheet C:\DITA-OT\DITA-OT1.8.5-ELED\plugins\com.elovirta.ooxml\docx\word\document.flat.xsl
 [xslt] Processing E:\Vinod\2017\Jan\4-1\temp\docx\oxygen_dita_temp\Test_CLEANED.xml to E:\Vinod\2017\Jan\4-1\temp\docx\oxygen_dita_temp\docx\docProps\core.xml
 [xslt] Loading stylesheet C:\DITA-OT\DITA-OT1.8.5-ELED\plugins\com.elovirta.ooxml\docx\docProps\core.xsl
 [xslt] Processing E:\Vinod\2017\Jan\4-1\temp\docx\oxygen_dita_temp\Test_CLEANED.xml to E:\Vinod\2017\Jan\4-1\temp\docx\oxygen_dita_temp\docx\word\document.xml
 [xslt] Loading stylesheet C:\DITA-OT\DITA-OT1.8.5-ELED\plugins\com.elovirta.ooxml\docx\word\document.xsl
 [xslt] C:\DITA-OT\DITA-OT1.8.5-ELED\plugins\com.elovirta.ooxml\docx\word\document.topic.xsl:22:30: Warning! Stylesheet module file:/C:/DITA-OT/DITA-OT1.8.5-ELED/plugins/com.elovirta.ooxml/docx/word/document.topic.xsl is included or imported more than once. This is permitted, but may lead to errors or unexpected behavior
 [xslt] C:\DITA-OT\DITA-OT1.8.5-ELED\plugins\com.elovirta.ooxml\docx\word\document.topic.xsl:604:47: Fatal Error! No template exists named getVariable
 [xslt] Failed to process E:\Vinod\2017\Jan\4-1\temp\docx\oxygen_dita_temp\Test_CLEANED.xml

构建失败 C:\DITA-OT\DITA-OT1.8.5-ELED\build.xml:44:执行此行时出现以下错误: C:\DITA-OT\DITA-OT1.8.5-ELED\plugins\com.elovirta.ooxml\build.xml:74: javax.xml.transform.TransformerConfigurationException: net.sf.saxon.s9api.SaxonApiException: 样式表编译失败:报告了 1 个错误 在 net.sf.saxon.jaxp.SaxonTransformerFactory.newTemplates(未知来源) 在 org.apache.tools.ant.taskdefs.optional.TraXliaison.readTemplates(TraXliaison.java:300) 在 org.apache.tools.ant.taskdefs.optional.TraXliaison.createTransformer(TraXliaison.java:317) 在 org.apache.tools.ant.taskdefs.optional.TraXliaison.transform(TraXliaison.java:178) 在 org.apache.tools.ant.taskdefs.XSLTProcess.process(XSLTProcess.java:876) 在 org.apache.tools.ant.taskdefs.XSLTProcess.execute(XSLTProcess.java:414) 在 org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292) 在 sun.reflect.GeneratedMethodAccessor4.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源) 在 java.lang.reflect.Method.invoke(未知来源) 在 org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 在 org.apache.tools.ant.Task.perform(Task.java:348) 在 org.apache.tools.ant.Target.execute(Target.java:435) 在 org.apache.tools.ant.Target.performTasks(Target.java:456) 在 org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393) 在 org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleCheckExecutor.java:38) 在 org.apache.tools.ant.Project.executeTargets(Project.java:1248) 在 org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:440) 在 org.apache.tools.ant.taskdefs.CallTarget.execute(CallTarget.java:105) 在 org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292) 在 sun.reflect.GeneratedMethodAccessor4.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源) 在 java.lang.reflect.Method.invoke(未知来源) 在 >org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 在 org.apache.tools.ant.Task.perform(Task.java:348) 在 org.apache.tools.ant.Target.execute(Target.java:435) 在 org.apache.tools.ant.Target.performTasks(Target.java:456) 在 org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393) 在 org.apache.tools.ant.Project.executeTarget(Project.java:1364) 在 >org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) 在 org.apache.tools.ant.Project.executeTargets(Project.java:1248) 在 org.apache.tools.ant.Main.runBuild(Main.java:851) 在 org.apache.tools.ant.Main.startAnt(Main.java:235) 在 org.apache.tools.ant.launch.Launcher.run(Launcher.java:280) 在 org.apache.tools.ant.launch.Launcher.main(Launcher.java:109) 引起:net.sf.saxon.s9api.SaxonApiException:样式表编译失败:报告1个错误 在 net.sf.saxon.s9api.XsltCompiler.compile(XsltCompiler.java:546) ... 35 更多 引起:net.sf.saxon.trans.XPathException:样式表编译失败:报告了1个错误 在 net.sf.saxon.style.Compilation.compileSingletonPackage(Compilation.java:97) 在 net.sf.saxon.s9api.XsltCompiler.compile(XsltCompiler.java:543)

... 35 更多

net.sf.saxon.s9api.SaxonApiException:样式表编译失败:报告 1 个错误 在 net.sf.saxon.s9api.XsltCompiler.compile(XsltCompiler.java:546) 在 net.sf.saxon.jaxp.SaxonTransformerFactory.newTemplates(未知来源) 在 org.apache.tools.ant.taskdefs.optional.TraXliaison.readTemplates(TraXliaison.java:300) 在 org.apache.tools.ant.taskdefs.optional.TraXliaison.createTransformer(TraXliaison.java:317) 在 org.apache.tools.ant.taskdefs.optional.TraXliaison.transform(TraXliaison.java:178) 在 org.apache.tools.ant.taskdefs.XSLTProcess.process(XSLTProcess.java:876) 在 org.apache.tools.ant.taskdefs.XSLTProcess.execute(XSLTProcess.java:414) 在 org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292) 在 sun.reflect.GeneratedMethodAccessor4.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源) 在 java.lang.reflect.Method.invoke(未知来源) 在 org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 在 org.apache.tools.ant.Task.perform(Task.java:348) 在 org.apache.tools.ant.Target.execute(Target.java:435) 在 org.apache.tools.ant.Target.performTasks(Target.java:456) 在 org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393) 在 org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleCheckExecutor.java:38) 在 org.apache.tools.ant.Project.executeTargets(Project.java:1248) 在 org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:440) 在 org.apache.tools.ant.taskdefs.CallTarget.execute(CallTarget.java:105) 在 org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292) 在 sun.reflect.GeneratedMethodAccessor4.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源) 在 java.lang.reflect.Method.invoke(未知来源) 在 org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 在 org.apache.tools.ant.Task.perform(Task.java:348) 在 org.apache.tools.ant.Target.execute(Target.java:435) 在 org.apache.tools.ant.Target.performTasks(Target.java:456) 在 org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393) 在 org.apache.tools.ant.Project.executeTarget(Project.java:1364) 在 org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) 在 org.apache.tools.ant.Project.executeTargets(Project.java:1248) 在 org.apache.tools.ant.Main.runBuild(Main.java:851) 在 org.apache.tools.ant.Main.startAnt(Main.java:235) 在 org.apache.tools.ant.launch.Launcher.run(Launcher.java:280) 在 org.apache.tools.ant.launch.Launcher.main(Launcher.java:109) 引起:net.sf.saxon.trans.XPathException:样式表编译失败:报告了1个错误 在 net.sf.saxon.style.Compilation.compileSingletonPackage(Compilation.java:97) 在 net.sf.saxon.s9api.XsltCompiler.compile(XsltCompiler.java:543) ... 35 更多

总时间:6秒

进程以退出代码结束:1

请帮助我。

【问题讨论】:

不,我认为您需要 DITA 2.x,因为读取 仅支持最新的稳定版本的 DITA-OT。来自github.com/jelovirt/com.elovirta.ooxml 但我只想使用 DITA 1.8.5 进行转换以解决该错误,请给我任何建议 【参考方案1】:

您的插件不适用于 DITA-OT 1.8.5,即 EOL。你的转换失败了,因为没有找到getVariable函数,这个函数已经和DITA-OT 2.x一起引入了。您应该明确考虑将您的环境迁移到DITA-OT 2.x。如果不能,请使用 com.elovirta.ooxml 和您的 DITA 专业化为您的 docx 转换设置第二个工具包。您可以通过设置dita.dir参数在转换过程中选择OT。您也可以在构建脚本中执行此操作。不值得尝试向后移植com.elovirta.ooxml,您最好将资源用于升级您的环境。

【讨论】:

我对此有些担心,请提供您的个人邮件 ID。 在 com.elovirta.ooxml 插件的 xsl 进行一些更改后,在 DITA OT 1.8.5 中工作,但带有图像的 dita 文件没有转换,请给我任何建议。

以上是关于在 DITA OT 1.8.5 中使用插件 com.elovirta.ooxml 将 DITA 转换为 DOCX的主要内容,如果未能解决你的问题,请参考以下文章

我需要如何在氧气中使用名为 com.elovirta.ooxml 的 DITA OT 插件将 dita 转换为 word 的步骤

调整 Dita-OT 插件以输出 PDF 线框所有块实线边框

你能在 Dita-ot 插件中从 XSL 访问 dita map keydef 变量吗

使用 DITA-OT 在 Eclipse InfoCenter TOC 中设置***链接

使用DITA-OT发布一份CouchBase Server文档

在 DITA-OT ibmUtilitiesDomain.ent