2016-11-16 4 views
0

XSLは:ノード

<xsl:output indent="yes"/> 

<xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="root"> 
    <xsl:copy> 
     <xsl:for-each-group select="RemittanceInformation" group-by="IndividualRemittance/ExchangeAssignedPolicyID"> 
      <xsl:copy> 
       <xsl:variable name="pos" select="position()"/> 
       <xsl:apply-templates select="EntityAssignedNumber, IndividualRemmittance, current-group()/RemittanceDetail"> 
        <xsl:with-param name="pos" select="$pos"/> 
       </xsl:apply-templates> 
      </xsl:copy> 
     </xsl:for-each-group> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="EntityAssignedNumber"> 
    <xsl:param name="pos"/> 
    <xsl:copy> 
     <xsl:value-of select="/root/RemittanceInformation[1]/EntityAssignedNumber + $pos - 1"/> 
    </xsl:copy> 
</xsl:template> 

私はO/Sに超便利マルタンhonnenからこのコードを持って、特定の種類が含まれていないすべてのノードを無視して、それぞれのためのコピーそれがしないことの1つは、タイプRemittanceInformationのノードがIndividualRemmittanceを持たない場合、それはまったくコピーしないということです。

私は、IndividualRemmittanceが存在する場合にそれらをグループ化して重複がないようにします(コードはそれを既に実行しています)。しかし、IndividualRemmittanceなしでRemittanceInformationを実行すると、通常通り。

これを行うには何を変更する必要がありますか?

+1

コードを理解しようとしましたか?どの部分を変更する必要があると思われますか?やってみました?あなたの試行の結果は何でしたか? – Tomalak

+0

グループ化は "IndividualRemittance/ExchangeAssignedPolicyID"で実行されますが、私はどうしたらいいのか分かりません... IndividualRemittanceが存在しないときはグループ化しません。私はその状態を設定する方法を知らない。 –

+1

さて、あなたはそれらをグループ化するのではなく、それらをコピーしたくありません。それは2つのことです。言い換えれば、あなたがしたいのは、1)グループ分けの対象から除外し、2)別々にコピーすることです。 – Tomalak

答えて

1

Tomalakの助けを借りて、私はそれを機能させました! :D

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 
    <xsl:output indent="yes"/> 

    <xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="root"> 
    <xsl:variable name="countComp" select="count(//RemittanceInformation[not(IndividualRemittance)])"/> 
    <xsl:copy> 
     <xsl:for-each select="RemittanceInformation[not(IndividualRemittance)]"> 
     <xsl:variable name="pos" select="position()"/> 
     <xsl:copy> 
      <xsl:apply-templates select="@* | node()"> 
      <xsl:with-param name="pos" select="$pos"/> 
      </xsl:apply-templates> 
     </xsl:copy> 
     </xsl:for-each> 

     <xsl:for-each-group select="RemittanceInformation" group-by="IndividualRemittance/ExchangeAssignedPolicyID"> 
     <xsl:copy> 
      <xsl:variable name="pos" select="position()"/> 
      <xsl:apply-templates select="EntityAssignedNumber, IndividualRemittance, current-group()/RemittanceDetail"> 
      <xsl:with-param name="pos" select="$pos+$countComp"/> 
      </xsl:apply-templates> 
     </xsl:copy> 
     </xsl:for-each-group> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="EntityAssignedNumber"> 
    <xsl:param name="pos"/> 
    <xsl:copy> 
     <xsl:value-of select="/root/RemittanceInformation[1]/EntityAssignedNumber + $pos - 1"/> 
    </xsl:copy> 
    </xsl:template> 
</xsl:transform> 
+0

'$ pos + 8'とは何ですか?なぜ8?私はそれが正しいとは思わない... – Tomalak

+0

それは私が使用したハードコード番号でした。正しく、変数にする必要があります。私は今すぐ更新します。 –

関連する問題