2014-09-04 23 views
1

我有2個元件是這樣的:墊字符串值與前導空格即使當元件是空的

<PhoneNumber>0870 6071352</PhoneNumber> 
<FaxNumber>01722 422301</FaxNumber> 

在輸出(固定寬度的文本)這兩種需要與領先的空格至填充的71個字符

長度所以,我試圖:

<xsl:value-of select="substring(concat('                  ', msg:ContactDetails/msg:PhoneNumber), string-length(msg:ContactDetails/msg:PhoneNumber) + 1, 71)"/> 
<xsl:value-of select="substring(concat('                  ', msg:ContactDetails/msg:FaxNumber), string-length(msg:ContactDetails/msg:FaxNumber) + 1, 71)"/> 

但當元件是空的串長度函數上述返回0,所以我只得到了什麼樣子59位在我的輸出,而不是71

我也試過:

<xsl:value-of select="substring(concat('                  ', msg:ContactDetails/msg:PhoneNumber), 12, 71)"/> 
<xsl:value-of select="substring(concat('                  ', msg:ContactDetails/msg:FaxNumber), 12, 71)"/> 

,但同樣的事情發生時,FaxNumber或Phonenumber來的元素是空

哪有我改變我的xsl來處理這樣的情況?

+0

檢查你的房屋。沒有理由爲什麼公式不適用於空字符串。 – 2014-09-04 16:28:10

+0

在示例中有一些錯誤(可能在代碼中) – 2014-09-04 17:49:46

回答

-2

認爲不要碰風是個好主意。

在XSLT意識形態U有兩個不同的來源(填充元素和空元素),所以你不必用硬編寫的函數來修復它。你必須修復它的XSLT風格。

1)模板 - 這是有用的,如果不是隻有2個變種可以,但許多具有鮮明的約束

a)使用< XSL:申請模板選擇=「味精:******中國|味精:FaxNumber」模式= 「格式化」>

b)和兩種不同的模板<的xsl:模板匹配= 「MSG:******中國| MSG:FaxNumber」 模式= 「格式化」>和類似的東西<的xsl:模板匹配=「MSG:******中國[ string(。)=''] | msg:FaxNumber [string(。)='']「mode =」formatted「> - 第二個將獲得更高優先級

2)老朋友< xsl:if /> and < xsl:選擇/> - 如果空虛是唯一的問題,那麼它是有用的

+0

除去'020 123 45678'中的前導和尾隨空格,然後用71個字符輸出結果(甚至當元素爲空時)怎麼辦? – 2014-09-04 16:26:14

+1

認爲在提出解決方案之前能否重現問題是個好主意。 – 2014-09-04 16:30:29

+0

我有,一切都可以 - 因爲我們的提問者在代碼中有錯誤,請參閱下面的內容 – 2014-09-04 18:01:12