2017-10-24 37 views
0

私のXMLここでXSLテスト子要素

<SESSION MAPPINGNAME ="example_mapping_name" DESCRIPTION ="here is some data"> 
    <SESSTRANSFORMATIONINST TRANSFORMATIONNAME ="name1" TRANSFORMATIONTYPE ="Target Definition"> 
    </SESSTRANSFORMATIONINST> 
    <SESSTRANSFORMATIONINST TRANSFORMATIONNAME ="name2" TRANSFORMATIONTYPE ="Source Definition"> 
    </SESSTRANSFORMATIONINST> 
    <SESSTRANSFORMATIONINST TRANSFORMATIONNAME ="name3" TRANSFORMATIONTYPE ="Lookup Procedure"> 
    </SESSTRANSFORMATIONINST> 

は私のXSL

<xsl:template match="SESSION">  
    <xsl:value-of select="SESSTRANSFORMATIONINST[count(@TRANSFORMATIONTYPE !='Lookup Procedure')]" /> 
     <tr> 
      <td class="mapping"><xsl:value-of select="@MAPPINGNAME" /> (<xsl:value-of select="@DESCRIPTION" />)</td> 
      <td class="source-definition"><xsl:apply-templates select="SESSTRANSFORMATIONINST[@TRANSFORMATIONTYPE = 'Source Definition']"/></td> 
      <td class="source-tables"><xsl:apply-templates select="SESSTRANSFORMATIONINST[@TRANSFORMATIONTYPE = 'Source Qualifier']/ATTRIBUTE[@NAME = 'Sql Query']" /> </td> 
      <td><xsl:apply-templates select="SESSIONEXTENSION[@TRANSFORMATIONTYPE = 'Target Definition']" /></td> 
      <td><xsl:value-of select="ATTRIBUTE[@NAME = 'Parameter Filename']/@VALUE" /></td>   
     </tr>  
</xsl:template> 

です私はXMLからいくつかの詳細を残してきたが、うまくいけば、あなたはそれがどのように見えるかのアイデアを得ることができます。セッション(およびSESSTRANSFORMATIONINSTの他の属性)からマッピング名を取得しようとしていますが、SESSIONには検索手順のSESSTRANSFORMATIONINST TRANSFORMATIONTYPEが含まれていない場合に限ります。

私は多分アプローチのカウントを使用すると良いかもしれないと思った。これは、TRANSFORMATIONTYPEにLookup Procedureが表示される回数をカウントし、0より大きい場合はデータを取得しません。

私はXSLにはかなり新しいので、これがどのようにコード化されるのかはわかりません。どんな助けでも感謝します、ありがとう。

+1

ようこそスタックオーバーフロー! XSLTに関する質問をするときに最も役に立つ答えを得るためには、以下のものを提供できるのが通常です:(1)入力XMLのサンプル(大きければ関連する部分に縮小されます)(2) (3)(1)に(2)を適用した場合の望ましい出力。 – JLRishe

答えて

0

<SESSION>の属性値を表示するかどうかにかかわらず、条件を以下のように変更する必要があります。

<xsl:if test="count(SESSTRANSFORMATIONINST[@TRANSFORMATIONTYPE = 'Lookup Procedure']) = 0"> 

@TRANSFORMATIONTYPE = Lookup Procedureのカウントが<SESSIONTRANSFORMATIONINST>ノードに対する0である場合、これはチェックします。カウントが0の場合、<xsl:if>内のコードが処理されます。

テンプレートは次のように変更できます。

<xsl:template match="SESSION">  
    <xsl:if test="count(SESSTRANSFORMATIONINST[@TRANSFORMATIONTYPE = 'Lookup Procedure']) = 0"> 
     <tr> 
      ...   
     </tr> 
    </xsl:if> 
</xsl:template> 
0

ここで問題になるのは、セッション内でセッション名と値を取得するという2つのことを同時に実行しようとしていることです。これらはおそらく2つの異なる操作であるはずです。

あなたが私たちに与えられたものに基づいて、それはあなたがする必要が正確に何を伝えるのは難しいのですが、それはおそらく、これらの線に沿って次のようになります。あなたが決めることcount()を使用することを計画している場合

<!-- in a template somewhere --> 
<xsl:apply-templates select="POWERMART/REPOSITORY/FOLDER/WORKFLOW/SESSION" /> 

<xsl:template match="SESSION"> 
    <outputSession id="{ @NAME }"> 
    <xsl:apply-templates select="SESSTRANSFORMATIONINST[@TRANSFORMATIONTYPE != 'oranges']" /> 
    </outputSession> 
</xsl:template> 

<xsl:template match="SESSTRANSFORMATIONINST"> 
    <outputInst> 
    <xsl:copy-of select="@*" /> 
    </outputInst> 
</xsl:template> 
+0

ここでちょっと説明してみましょう。各XMLファイルには、複数のSESSIONタグがあります。これらのコード(すでに書かれ、動作しているコード)からNAMEという属性を抽出する必要があります。これらのSESSIONタグの中には、複数のSESSTRANSFORMATIONINSTタグもあります。これらから、私は様々な属性(すでに書かれ、動作しているコード)を抽出する必要があります。私が持っている問題は、SESSTRANSFORMATIONINST TRANSFORMATIONTYPEのルックアップ・プロシージャが含まれていない場合にのみ、セッションから情報を抽出することに興味があるということです。 – devAds

+0

@AdamCooklin詳細については、ご質問のコメントをご覧ください。私の答えが十分でない場合、必要なコンポーネントなしでこれを解決しようとするのは非生産的だと思います。 – JLRishe

+0

私はコメントに十分な文字を与えられていないので、これに関する新しい質問を提出しました。これはXSL Testing and Filteringと呼ばれ、さらに詳細に説明されています。ありがとう – devAds