2011-08-07 3 views
2

HIに基づいてフィードいずれかが、私は条件どの条件よりもより大きく、下を確認し、適用する行が長

を準備する必要があることに基づいて、値の文字列の長さを確認する方法を、この問題に助けることができますここに私のxmlここ

<?xml version="1.0" standalone="yes"?> 
<NewDataSet> 
    <Table> 

<MSG_TYPE_CODE>O102N</MSG_TYPE_CODE> 

<CTD_ORD_INS>//TAGBABNAGB2LXXX248</CTD_ORD_INS> 

<CTD_CTD_PKG_ID>477</CTD_CTD_PKG_ID> 

</Table> 

</NewDataSet> 

は私のXSLですが、それは

<?xml version="1.0" encoding="utf-8"?> 

に働いていませんでした

値が52Aで値をCONCATしようとしている35未満のcharイムは、値iが必要ここ52D 1つの以上の条件でCONCATしようとする35以上のIMであると仮定されている場合、私は次のように条件をチェックしています長さが35ミリ秒以上であれば、52Dと連結し、最初の行で1〜35、2行目の行送りで36〜70として解析する必要があります。何らかの論理を示唆するものがあれば教えてください。

答えて

2

あなたのテンプレートに関するいくつかの問題:

  1. 35を引用符で囲むと、番号ではなく文字列として評価されます。
  2. <ニーズにエスケープする(例えば&lt;
  3. あなたの空<text/>は何もしていません。あなたが現在どのようにそれらを持っているかは、まったくそれらを持っていないのと同じです。

代わりにこれを試してみてください:

<xsl:template mode ="SequenceB" match="NewDataSet/Table"> 
    <xsl:choose> 
     <xsl:when test ="substring(./MSG_TYPE_CODE,2,3)= '102'"> 
      <xsl:if test ="string-length(./CTD_ORD_INS) > 35"> 
       <xsl:value-of select= "concat(':52D:',./CTD_ORD_INS)"/> 
       <xsl:text>,</xsl:text> 
      </xsl:if> 
      <xsl:if test ="string-length(./CTD_ORD_INS) &lt; 35" > 
       <xsl:value-of select= "concat(':52A:',./CTD_ORD_INS)"/> 
       <xsl:text>,</xsl:text> 
      </xsl:if>     
     </xsl:when> 
    </xsl:choose> 
</xsl:template> 

あなたはそれがために書き直すことができもう少しDRY

<xsl:template mode ="SequenceB" match="NewDataSet/Table"> 

    <xsl:choose > 

     <xsl:when test ="substring(./MSG_TYPE_CODE,2,3)= '102'" > 
      <xsl:choose> 
       <xsl:when test ="string-length(./CTD_ORD_INS) > 35" > 
        <xsl:text>:52D:</xsl:text> 
       </xsl:when> 
       <xsl:otherwise> 
        <xsl:text>:52A:</xsl:text> 
       </xsl:otherwise> 
      </xsl:choose> 

      <xsl:value-of select= "./CTD_ORD_INS"/> 
      <xsl:text>,</xsl:text>  

     </xsl:when> 
    </xsl:choose> 
</xsl:template> 
関連する問題