【问题标题】:ant xmltask copy filesant xmltask 复制文件
【发布时间】: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 更改为 &lt;file src="file:///c:/tmp/myfile.xml" ...&gt; 或只是 &lt;file src="C:\tmp\myfile.xml" ...&gt;
  • 我试过 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。

标签: xml ant


【解决方案1】:

我是这样运行的:

<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>


<target name="copy-xml" depends="" unless="" description="copy xml files" >  

 <property name="copySourcesFile" value="${copySourcesFile}" /> 

 <basename property="file.basename" file="${copySourcesFile}"/>
 <dirname property="path.dirname" file="${copySourcesFile}"/>

 <pathconvert property="file.path.stripped">
        <file file="${path.dirname}" />
        <!-- path convert strips off the leading ${basedir} and "\file\:" -->
        <map from="${basedir}\file:\" to="" />
 </pathconvert>  
<copy todir="C:${file.separator}tmp${file.separator}" failonerror="false">
<fileset dir="${file.path.stripped}">
<include name="${file.basename}" />
</fileset>
</copy>
</target>

但我不确定这是否是一个好的解决方案。对此有什么建议吗?怎么会更好?

【讨论】:

    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    • 1970-01-01
    相关资源
    最近更新 更多