我想迭代一个目录中的一堆文件,并从它们的文件名创建一个xml文档。 下面的代码(任务定义中省略): 当在Ant中运行Xmltask for循环时出现意外的输出
<target name="test1">
<for param="file">
<path>
<fileset dir="${basedir}/schemas" includes="*.xsd" />
</path>
<sequential>
<echo message="found file [email protected]{file}" />
<xmltask source="wiki.xml" dest="wiki.xml" outputter="simple:4">
<insert path="//exported" position="after">
<![CDATA[
<exported Id="@{file}" />
]]>
</insert>
</xmltask>
<echo message="------------------------------"/>
<loadfile property="mymess"
srcFile="wiki.xml"/>
<echo message="${mymess}"/>
<echo message="------------------------------"/>
</sequential>
</for>
</target>
</project>
初始源文件wiki.xml看起来像:
<top>
<exported Id="Animal_v1"></exported>
</top>
这是调试输出:
test1:
[echo] found file .....C:\temp\BranchBS_v1.xsd
[echo] ------------------------------------------------------------
[echo] <?xml version="1.0" encoding="UTF-8" standalone="no"?>
[echo]
[echo] <top>
[echo] <exported Id="Animal_v1"></exported>
[echo] <exported Id="C:\temp\schemas\BranchBS_v1.xsd"></exported>
[echo] </top>
[echo]
[echo] ------------------------------------------------------------
[echo] found file .....C:\temp\schemas\CalendarEvent_v1.xsd
[echo] ------------------------------------------------------------
[echo] <?xml version="1.0" encoding="UTF-8" standalone="no"?>
[echo]
[echo] <top>
[echo] <exported Id="/Animal_v1"></exported>
[echo] <exported Id="C:\temp\schemas\BranchBS_v1.xsd"></exported>
[echo] </top>
[echo]
[echo] ------------------------------------------------------------
这表明第一遍是正确的:它找到了“种子”条目(动物)加上刚添加的(分支)。 调试输出看起来像第二遍没有发生,因为它与第一次相同,但是当我在脚本完成时看到wiki.xml的内容时,它看起来像这样:
<top>
<exported Id="Animal_v1"></exported>
<exported instanceId="C:\temp\schemas\CalendarEvent_v1.xsd"></exported>
<exported instanceId="C:\temp\schemas\BranchBS_v1.xsd"></exported>
<exported instanceId="C:\temp\schemas\CalendarEvent_v1.xsd"></exported>
</top>
因此,它不仅写了CalendarEvent记录(从调试中丢失),而且它做了两次!
我真的很困惑。
啊,是的,很好的发现 - 我没有意识到你可以声明一个'var'并用它来代替一个属性。这就解释了为什么调试与输出文件不匹配,但输出仍然是错误的。似乎有一个问题在连续两次调用xmltask(而不是for循环) - 也许文件锁定?最后,我使用循环中的echo xml和xmltask的混合来添加echxml不添加的命名空间 –