我想迭代一個目錄中的一堆文件,並從它們的文件名創建一個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不添加的命名空間 –