2010-05-17 97 views
3

我要做到以下幾點:如何改進XSL中的變量覆蓋/覆蓋?

  1. 聲明一個變量
  2. 進入一個if語句
  3. 覆蓋變量

XSL說,我不能一個變量聲明兩次,那麼我能做些什麼來改善這一步?

另一種方法是檢查是否設置了變量。我這樣做,因爲我跳過了第一步,並在if語句中聲明瞭變量。在另一個if語句中,我想檢查變量是否存在。

+5

這不是你想要做什麼的描述 - 它是你想怎麼做一個說明。 (而且這種情況不會發生。) 描述你想要做什麼。 – 2010-05-17 22:12:19

+0

它並不總是「什麼」的問題。我的問題包含許多編程語言的一個通用過程(設置一個變量並重置一個變量)。所以我只是問你是怎麼做到的。希望你能接受這種對XSL使用中新手的人的想法。 – ChrisBenyamin 2010-05-18 09:50:44

+1

這總是一個「你想做什麼」的問題。即使在常規編程語言中,僅設置/重置變量也是達到目的的一種手段。由於在XSLT中重新分配變量是不可能的,所以知道你實際正在嘗試做什麼是至關重要的。否則,您可能會收到的任何提示將始終模糊不清。 – Tomalak 2010-05-18 14:21:20

回答

5

如果你已經提到了你認爲你需要「重寫變量」的示例代碼,那麼任何像Tomalak,Dimitre這樣的專家會建議你一個更好的(替代)選項/建議。

好吧。如果它只是你的問題(比如如何處理變量不能變化的語言!!! ??),那麼我敢打賭你會在練習時得到澄清..

當我開始使用XSLT作爲一個初學者,即使我有同樣的問題..但很快我意識到.. 我們不需要變量變化。 ;);)

我覺得它的我願意和XSLT工作。
你可以把你的模板處理函數和過程的方式。 (不精確)
你可以遞歸地調用它們..
你可以想象的數據操縱的程度,可以通過其中一種方式實現..(可能並不容易,但不是不可能,至少)


回到你的問題,如果你真的需要改變變量的值..然後隨意定義一個新的變量..!?對上一個變量的值使用數學運算符,內置函數等等,而不是將其分配回相同的變量..將其分配給一個新的變量..並根據需要使用它。


這可能不是有效的技術,但可以是一個步驟1.

在另一方面..可以發送的表達。[like translate(., abc, ABC)]作爲參數(帕拉姆)到其他模板..或可以直接寫成輸出.. !!以避免變量變化。 :))

+0

對模糊問題的好解答+1 – 2010-06-04 20:12:17

+0

@Dimitre,謝謝: )我很高興收到你的讚美。 – 2010-06-05 10:59:42

2

正如你已經發現,在XSLT標準要求following

有約束力的陰影,如果 結合發生在一個點的另一個結合,其中 其他結合是可見的,而 綁定具有相同名稱。這是一個錯誤 如果結合由 XSL成立:變量或XSL:一個模板內param元素 遮蓋另一個 結合由一個xsl成立:可變 或XSL:param元素也是 模板內。如果由模板 中的xsl:變量 或xsl:param元素建立的 綁定映射另一個由 xsl:variable或xsl:param頂層 元素建立的綁定,則不是錯誤。

這裏的解決方案取決於你真正想做什麼。

  • 如果您希望變量承擔整個模板單個值,但是你想要的值取決於一個條件,把一個<的xsl:如果>,或者更可能的是,<的xsl:選擇>可變>元素
  • 如果您希望變量僅在< XSL採取不同的價值:在< XSL內如果>塊,然後要麼
    • 使用不同的變量名或
    • 把< xsl:呼叫模板>裏面的< xsl:if >並在被調用的模板中再次定義該變量。
+1

@Dimitre:放鬆一下。大多數人沒有真正理解功能語言和程序語言之間的差異。對於某人來說,「開始思考像一個功能性程序員」是他最「困難」的一種功能語言。是的,這是一個常見的錯誤。這就是爲什麼我更願意告訴他如何改變他的想法,而不是因爲他沒有正確的思考而譴責他。 – 2010-05-19 03:58:15

+0

梅內斯對不起,我將我的評論移至問題 - 它屬於哪裏。 :( 至於你的回覆,我很佩服你的耐心,仍然懷疑這對OP有用 - 顯然,他需要數月的練習 – 2010-05-19 05:04:17