我遇到了一個問題,我不知道如何解決它。如果已經有類似的問題,我找不到,請將鏈接發給我。xsl:template中的循環槽paramteres每當有空時都會執行某些操作
我有一個xml文件,其中包含一些信息,屬於一個創建的圖。我可以用xslt提取所有我想要的變量。爲了把它們打印到另一個文件我調用不同的模板和發送變量給它:從我的主要XSLT文件 例如一些代碼:
<xsl:call-template name="HostDefine">
<xsl:with-param name="variable1" select="@value1"/>
<xsl:with-param name="variable2" select="path/node/@value2"/>
<xsl:with-param name="variable3" select="path/node/@value3"/>
<xsl:with-param name="variable4" select="@value4"/>
<xsl:with-param name="variable5" select="@value5"/>
<xsl:with-param name="variable6">value6</xsl:with-param>
</xsl:call-template>
在大多數模板,我有辦法超過6個參數。
我這樣調用在另一個XSL文件模板:
<xsl:template name="HostDefine">
<xsl:param name="Variable1"/>
<xsl:param name="Variable2"/>
<xsl:param name="Variable3"/>
<xsl:param name="Variable4"/>
<xsl:param name="Variable5"/>
<xsl:param name="Variable6"/>
</xsl:template>
關閉模板之前,現在我想打印的所有變量到新的文件中這樣說:
o=<xsl:value-of select="$Variable1"/>
p=<xsl:value-of select="$Variable2"/>
q=<xsl:value-of select="$Variable3"/>
r=<xsl:value-of select="$Variable4"/>
s=<xsl:value-of select="$Variable5"/>
t=<xsl:value-of select="$Variable6"/>
那我的結構。現在我的問題是,這些變量中的一些可能是空的。只要它們是空的,它們就不應該被打印出來(也不是「o =/p =/q =/...」。所以我需要詢問模板裏的某個地方如果一個變量有一個值或者它是空的我認爲我只能做到這一點與節點。我想一種for循環(或在xslt一個增量 - 調用),但比我不能循環通過不同的參數。因此,我現在看到的唯一方法是做一個if-調用befor每個變量,看看它是否爲空,但有時超過20個變量在一個模板和大約10個模板中,這將是一個非常巨大的東西。是否有更優雅/更好的方式來做到這一點?
我真的會讚賞你的幫助謝謝
定義「空」。如果你有' ',那麼結果可以是空節點集(XSLT 1.0)或序列(XSLT 2.0)值「屬性或可以是具有單個屬性節點的節點集或序列。在這種情況下,您總是可以檢查'boolean($ variable1)'來檢查節點集或序列是否爲空。但是, value6 xsl:with-param>是不同的,您設置的值是結果樹片段或臨時樹。 –
如果它是空的,則xml-File中的節點中沒有「值」屬性。但是,當xml文件的節點中沒有「值」屬性時,將其手動設置爲空字符串或空白('')不會成爲問題。 我的目標是創建一個乾淨的結構化代碼。我可以去任何一種看起來很好的方式。 這是否回答了這個問題。我不知道我是否完全瞭解它。 – SmartProjection
是XSLT 1.0還是2.0?你總是通過所有聲明的參數,或者做你的陳述「在大多數模板中,我有超過6個參數」表明你可能聲明瞭超過6個參數,但有時候傳遞的參數比聲明的參數少。 –