2014-01-28 126 views
0

我有一些值:XSLT:輸出條件

//property[@name='bla1']/value 
//property[@name='bla2']/value 
//property[@name='bla3']/value 

我需要改變PARAMET「是活性」爲0時,如果它們都是等於零或爲空。

如果BLA1 = bla2 = bla3 = 「0或空」,那麼 「爲主動」= 0,其他1

我找的例子,但我不知道如何使用這個:

<xsl:attribute name="is-active"> 
      <xsl:choose> 
       <xsl:when test="...">0</xsl:when> 
       <xsl:otherwise>1</xsl:otherwise> 
      </xsl:choose> 
     </xsl:attribute> 

請幫助我。

回答

0

你正在尋找的表達是這樣的......

<xsl:when text="//property[@name='bla1']/value='0' 
       and //property[@name='bla2']/value='1' 
       and //property[@name='bla3']/value='2'"> 

注意,你不一定需要//財產元素的前面。如果您目前的情況下被放置在所有財產元素的父母,你可以把它們留出

<xsl:when text="property[@name='bla1']/value='0' 
       and property[@name='bla2']/value='1' 
       and property[@name='bla3']/value='2'"> 

或者,你可以使用一鍵搞定值

<xsl:key name="bla" match="property/value" use="../@name" /> 

然後,你可以寫這

<xsl:when text="key('bla', 'bla1')='0' 
       and key('bla', 'bla2')='1' 
       and key('bla', 'bla3')='2'"> 
0

在XSLT 2,我會做這樣的:

<xsl:attribute name="is-active" 
select=" 
if (every $i in //property[@name=('bla1','bla2','bla3')]/value satisfies $i=0) 
then 0 
else 1 
"/> 

,或者如果你想使用xsl:選擇:

<xsl:attribute name="is-active"> 
     <xsl:choose> 
      <xsl:when test="every $i in //property[@name=('bla1','bla2','bla3')]/value satisfies $i=0">0</xsl:when> 
      <xsl:otherwise>1</xsl:otherwise> 
     </xsl:choose> 
    </xsl:attribute> 

你可能還需要一個更通用的方法來選擇值的節點,所以你可以使用像

//property[matches(@name,'bla')]/value