2013-12-12 46 views
0

我在解決這個問題時遇到了一些麻煩,我確實需要一些幫助。 我想存儲具有非空的兄弟的最小變量。 我有一個XML至極看起來是這樣的:基於同級對xslt節點進行排序

<Root> 
    <Item> 
     <ValueOne>5</ValueOne> 
     <Item>bababa</Item> 
    </Item> 
    <Item> 
     <ValueOne>3</ValueOne> 
     <Item>ababa</Item> 
    </Item> 
    <Item> 
     <ValueOne>1</ValueOne> 
     <Item/> 
    </Item> 
</Root> 

所以我想最小ValueOne至極同級項目具有價值。 我的想法是這樣的:

<xsl:variable name="var"> 
    <xsl:for-each select="Root/Item"> 
     <xsl:if test="not(/Item = '')"> 
      <xsl:sort data-type="text"/> 
      <xsl:if test="position()=1"> 
       <xsl:value-of select="/Item"/> 
      </xsl:if> 
     </xsl:if> 
    </xsl:for-each> 
</xsl:variable> 

但這並不工作,我不知道爲什麼。正如你可能會告訴我不是最好的xslt ... 我不能重命名xml中的任何內容或更改它的結構。

編輯:代碼

+0

在你的例子中,沒有空的Item。最後一個Item/Item包含兩個換行符和9個空格(或一個製表符?)。假設你的意思是合法的有效載荷。如果不是,您可以使用normalize-space將其刪除。請澄清。 –

+0

我編輯了xml,沒有空格,沒有值。 – user2235494

回答

1

假設這些空間和回報是可有可無的,你可以使用:

<xsl:variable name="var"> 
    <xsl:for-each select="Root/Item[normalize-space(Item)]"> 
     <xsl:sort select="ValueOne" data-type="number" order="ascending"/> 
     <xsl:if test="position()=1"> 
      <xsl:value-of select="normalize-space(ValueOne)"/> 
     </xsl:if> 
    </xsl:for-each> 
</xsl:variable> 

去除所有多餘的空白,這可以簡化爲:

<xsl:variable name="var"> 
    <xsl:for-each select="Root/Item[Item/text()]"> 
     <xsl:sort select="ValueOne" data-type="number" order="ascending"/> 
     <xsl:if test="position()=1"> 
      <xsl:value-of select="ValueOne"/> 
     </xsl:if> 
    </xsl:for-each> 
</xsl:variable> 
+0

對不起,他們不是空格,我打字的速度有點快。 INTE最後根/項目,根/項目/項目被認爲是空的: 威爾仍然工作,雖然? – user2235494

+0

@ user2235494請編輯您的*原始* XML。註釋中的代碼不能可靠地讀取。 –