2015-09-19 3 views
0

смотрите ниже, пример XMLкак считать, используя для каждого в XSL

<OuttypList> 
    <Outtyp> 
     <A> 
      <P>0</P> 
      <T>NoShare</T> 
     </A> 
    </Outtyp> 
    <Outtyp> 
     <Outtypform>Bank</Outtypform> 
     <A> 
      <A> 
       <P>1000</P> 
       <T>Share</T> 
      </A> 
      <S>100</S> 
     </A> 
     <B>   
      <C>3015</C> 
      <D>James</D> 
     </B> 
    </Outtyp> 
    <Outtyp> 
    <Outtypform>Bank</Outtypform> 
     <A> 
      <P>10</P> 
      <T>Share</T> 
     </A> 
    </Outtyp></OuttypList> 

и я отображая детали Outtyp, а также после отображения каждого Outtyp я вставив пространство так, что данные хорошо выглядит.

<xsl:for-each select="OuttypList/Outtyp"> 
<xsl:if test="normalize-space(Outtypform)"> 
--displaying details-- 
</xsl:if> 
<xsl:choose> 
     <xsl:when test="position() != last()"> 
       <tr> 
        <td colspan="2"> 
          <span><text>&#160;</text></span> 
        </td> 
       </tr> 
     </xsl:when> 
     <xsl:otherwise></xsl:otherwise> 
</xsl:choose> 

Проблема: теперь с этим кодом, это создает дополнительное пространство, первоначально который я не хочу, так что я не хочу дополнительное пространство линии, если нет Outtypform присутствует в Outtyp..need изменить " для каждого ", чтобы он рассчитывал Outtyp только на основе, если Outtypform присутствует в Outtyp. Например, над образцом xml есть 3 Outtyp node .... Но только два содержат , поэтому только два узла с деталями должны отображаться и дополнительное пространство после каждого Outtyp.

+0

Можете ли вы показать ожидаемый результат? –

+0

_ "следует считать Outtyp только на основе, если Outtypform присутствует в Outtyp" _ >>, в то время как это возможно с помощью 'xsl: number', гораздо проще и предпочтительнее использовать предикат. Фактически, каждый раз, когда вы обнаруживаете, что вы пишете «xsl: if» с тестом на узлы, вы должны очень сильно поместить его в предикат выбора. – Abel

ответ

1

Либо поместите xsl:choose блок внутри xsl:if блока, или - предпочтительно - изменить свой выбор на:

<xsl:for-each select="OuttypList/Outtyp[normalize-space(Outtypform)]"> 

Тогда вы не будете нуждаться в xsl:if вообще.

Не проиндексирован, так как предоставленный код является неполным.

+0

спасибо, что это сработало. – user3855942

+0

@ user3855942 Если на ваш вопрос ответили, пожалуйста, закройте его, приняв ответ. –