【发布时间】:2017-05-01 13:40:52
【问题描述】:
我有以下 xml 文件:
<?xml version="1.0"?>
<job>
<files>
<file src="file:\C:\tmp\myfile.xml" path="myfile.xml" format="dita"/>
<file src="file:\C:\tmp\myfile2.xml" path="myfile2.xml" format="dita"/>
</files>
</job>
我尝试使用 ant 脚本读取 xml 文件的内容,然后想复制相应的文件。这是我的蚂蚁脚本:
<?xml version="1.0" encoding="UTF-8"?>
<project name="TPreProcess" default="start" basedir="." >
<target name="start">
<taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask"/>
<xmltask source="${basedir}${file.separator}.job.xml" report="false" >
<call path="//job/files/file[@format='dita' or @format='ditamap' ]" target="copy-xml" buffer="abc">
<param name="copySourcesFile" path="@src"/>
</call>
</xmltask>
</target>
<target name="copy-xml" depends="" unless="" description="copy xml files">
<copy file="${copySourcesFile}" todir="C:${file.separator}tmp${file.separator}test_dita${file.separator}" failonerror="false" flatten="true"/>
</target>
</project>
ant 脚本位于插件文件夹中。在执行ant文件的日志文件中,总是显示找不到要复制的文件。你可以看到他总是把插件文件夹放在它前面。
复制-xml:
[复制] 警告:找不到要复制的文件 Q:\DITA\Dita-Open-Toolkit\plugins\com.xxxxx.dita.tran.process\file:\C:\tmp\myfile.txt。
我做错了什么?如何仅获取实际文件路径并找到要复制的文件?
【问题讨论】:
-
copy任务可以复制文件。为什么是 xmltask? -
我尝试使用 xmltask,因为我必须读取要从 xml 文件复制的文件(包括某些属性的过滤器)。有些文件节点的属性值不应被复制。或者我可以在没有 xmltask 的情况下读取 xml 文件吗?一个想法?
-
复制总是根据它之前的 basedir 条目构建路径。当我将 basedir 条目更改为“。”以外的其他内容时,它不再需要以前的插件文件夹。通过目标中 copySourcesFile 的测试输出,我看到要正确复制的实际文件名到达目标。所以副本本身会发生一些事情。但我不知道如何防止这种情况。有什么想法吗?
-
Ant 无法处理带有反斜杠的
file:协议引用。将源 XML 更改为<file src="file:///c:/tmp/myfile.xml" ...>或只是<file src="C:\tmp\myfile.xml" ...>。 -
我试过 file:\C:\tmp\myfile.xml 和 file:///C:/tmp/myfile.xml 都没有效果。它仍然放在之前的插件文件夹中。警告:找不到要复制的文件 Q:\DITA\Dita-Open-Toolkit\plugins\com.xxxxx.dita.tran.process\file:\C:\tmp\myfile.xml。