2009-10-06 60 views
1

我們需要從ant中調用一個可執行文件,它將xml作爲參數的一部分。使用exec很容易,但其中一個參數包含一個xml文件。我們試圖加載使用與striplinebreaks如何在exec螞蟻任務中將xml文本作爲參數傳遞?

<loadfile property="xmlStuff" srcFile="xmlFile.xml"> 
    <filterchain> 
    <striplinebreaks/> 
    </filterchain> 
</loadfile> 
<exec executable="theCommand"> 
    <arg value="Some other information and now our xml: '${xmlStuff}'" /> 
</exec> 

有沒有我們可以閱讀和轉義XML文檔在這種情況下使用的方式的loadFile目標xml文件?

編輯自xmlStuff引用了它的屬性,它們結束了arg valute屬性引號。

所以上面的例子中結束了,如:

theCommand "Some other information and now our xml: '<outerTag myAtt="foobar"> <innerTag /> </outerTag>'" 

相反的:

theCommand Some other information and now our xml: '<outerTag myAtt="foobar"> <innerTag /> </outerTag>' 

有什麼辦法有報價基本上三層?

一個用於arg標籤的值屬性(可能這些值不包含在最終命令中?)。

一個用於表示嵌套字符串的arg標記。

一個用於xmlStuff內的屬性。

此文件被注入到數據庫中,現在不可用。

+0

你是什麼意思「突破arg標籤」?什麼是你正在得到確切的錯誤信息?在可執行文件修復冒號後嘗試使用可執行文件,這些文件只是迴應它的參數,對我來說工作的很好。 – 2009-10-25 08:12:56

+0

感謝結腸。 我已經更新的問題了一點,但評估後$ {} xmlStuff的ARG標籤看起來像: 」 /> 嵌入式XML是大問題。 – Adam 2009-10-26 16:32:05

+0

您確定擴展爲包含尖括號的值的變量實際上是您的問題嗎?據我瞭解,Ant解析XML後擴展了變量引用,所以它不會影響解析。我試着用你的例子,它對我有用。你究竟測試了什麼,你得到了什麼錯誤? – 2009-11-04 21:37:01

回答

2

arg標籤的value屬性值雙引號似乎導致Windows的問題(但不能在Linux上;用Ant 1.7進行測試。 1)。

如果打破其他平臺不是一個問題,我想粗略的解決方法可能只是逃避最終在命令行上的引號。你可以通過添加下面的過濾器,以你的filterchain例如這樣做:

<tokenfilter> 
    <replacestring from='"' to='\"'/> 
</tokenfilter> 

編輯:在自己answer您揭示「theCommand」其實psql。由於它可以使用-f開關從文件讀取查詢,因此使用臨時文件確實是避免命令行故障的最簡單方法。但是,如果要將XML文件內容插入到SQL字符串文字中,則至少應考慮逃避撇號。

+0

會有什麼辦法來強制螞蟻不要在最終命令的arg周圍使用引號嗎?我發現這是真正的重頭戲,因爲我不能改變「theCommand」 – Adam 2009-11-12 16:08:17

+0

使用'line'屬性而不是'value'可以讓你指定一個以空格分隔的命令行參數列表:''這樣它不會在那裏添加引號,但是你可以通過空格將值分割成不同的參數。 – 2009-11-12 21:47:28

+0

謝謝jackem,這就是我需要的! – Adam 2009-12-04 19:35:37

0

嘗試把XML在CDATA節:

<loadfile 
    property="xmlStuff" 
    srcFile="xmlFile.xml"> 
<![CDATA[ 
    <filterchain> 
    <striplinebreaks/> 
    </filterchain> 
]]> 
</loadfile> 
+0

我不認爲你明白,我想剝線。問題是文件的內容。我嘗試在arg的value屬性中放置CDATA,但這在ANT中是不允許的。 – Adam 2009-10-07 15:26:13

+0

您不能將XML包含在CDATA節中作爲arg標記的文本值 - 即 cdata節xml? – 2009-10-07 15:37:10

+0

Arg不支持嵌套文本。 錯誤: 類org.apache.tools.ant.types.Commandline $參數 不支持嵌套的文本數據 – Adam 2009-10-07 15:44:52

0

我們一直在使用的解決方法是使用基於文件的參數,而不是「theCommand」(實際上是postgresql的psql命令)的命令行參數,並手動添加「其他信息...」 (實際上是插入查詢)複製到xml文件。很混亂,很難維護,但我想我會發布它。