2013-12-12 52 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。注释中的代码不能可靠地读取。 –