Я пытаюсь перебрать кучу файлов в каталог и создать XML-документ из их имен файлов. Вот код (taskdefs опущен): Неожиданный вывод при запуске Xmltask в ant for loop
<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] ------------------------------------------------------------
Это показывает, что первый проход был правильным: он обнаружил запись «семя» (Animal) плюс добавленный (Branch). выхода отладки выглядит второй проход не произошло, потому что это то же самое, как первые, но когда я на самом деле смотреть на контент с из 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 дважды подряд (не для цикла) - возможно, блокировка файлов? В конце я использовал смесь echo xml в цикле и xmltask после цикла, чтобы добавить пространства имен, которые echxml не добавляет –