2009-05-14 14 views
2

XSLTを初めて使用しています。私はXMLで2つのノードの値の値を比較する助​​けが必要です。XSLTで2つのノードの値を比較する方法

私のサンプルXML:私は<BranchGroup>ノードの下のいずれかに<AgencyGroup>ノードの下OrgIdノードの値を比較する必要が上記のXMLファイルで

<?xml version="1.0" encoding="utf-8"?> 
<G1Export xmlns=""> 
    <AgencyGroup xmlns=""> 
     <Agency xmlns=""> 
      <RecordType xmlns="">RecordType</RecordType> 
      <OrgId xmlns="">123</OrgId> 
     </Agency> 
    </AgencyGroup> 
    <BranchGroup xmlns=""> 
     <BranchCode xmlns=""> 
      <OrgId xmlns="">123</OrgId> 
     </BranchCode> 
    </BranchGroup> 
</G1Export> 

私はcompare()メソッドを使用しようとしましたが、それは私に1のreultを与えます。 実際の結果は0(等しい)でなければなりません。あなたは比較のためにBranchGroup 2の代わりに使用していたAgencyGroup brnchOrgIdについては 1 XSLTで2つのミスがあった ():私は

+0

@Andrew Hare:Oh no! clobberを編集します。正直なところ私の編集があなたよりも優れていると思う。あなたは束を逃した。 – Welbog

+0

2つの編集内容をマージします。 – Welbog

+0

あなたはまだ明らかに何も成功していないので、私はあなたの試みたコードをこの質問に加えるべきだと思います。その後、人々はあなたがそれをデバッグするのを手伝うことができます –

答えて

0
//G1Export/compare(AgencyGroup//OrgId, BranchGroup//OrgId) 

結果= 0

編集XSLT 2を使用していますあなたは持つべき= 0とない= '0'

修正さXSLT:

<xsl:template match="/"> 
     <xsl:element name="PICRESPONSE" namespace="fieldpoint.com/namespaces"> 
      <xsl:for-each select="//G1Export/AgencyGroup"> 
       <xsl:if test="count(.) &gt; 0"> 
        <!--org_id variable--> 
        <xsl:variable name="orgId" select="string(/G1Export/AgencyGroup/Agency/OrgId)"/> 
        <xsl:element name="EXPORTRESPONSE" namespace="fieldpoint.com/namespaces">; <xsl:for-each select="//G1Export/BranchGroup"> 
          <xsl:if test="count(.) &gt; 0"> 
           <xsl:variable name="brnchOrgId" select="string(/G1Export/BranchGroup/BranchCode/OrgId)"/>        
           <!--Put the Branch information inside the current agency node only if branch belong to current Agency--> 
           <xsl:if test="compare($brnchOrgId,$orgId)=0">asda 
            <xsl:value-of select="'orgid is same as branchogid'"/> 
           </xsl:if> 
          </xsl:if> 
         </xsl:for-each> 
        </xsl:element> 
       </xsl:if> 
      </xsl:for-each> 
     </xsl:element> 
    </xsl:template> 

出力:

<?xml version="1.0" encoding="UTF-8"?> 
<PICRESPONSE xmlns="fieldpoint.com/namespaces"> 
    <EXPORTRESPONSE>; orgid is same as branchogid</EXPORTRESPONSE> 
</PICRESPONSE> 

希望します。

+0

こんにちはRashmi、 Uは両方のノードのXpathでcomapareメソッドを使うことを意味します。 compare()メソッドは、ノードの値とxmlファイル内のこれらのノードの位置だけを比較しますか? –

+0

デフォルトの照合を使用して2つの文字列(この場合は値のみ)を比較します。 追加情報については、次のリンクを参照してください。http://www.xsltfunctions.com/xsl/fn_compare.html –

+0

一致:これはfalseを返します。私のXMLファイルでAgency/OrgIdノードの値は123で、BranchCode/OrgIdも123です。 –

1

なぜしないAgencyGroup/Agency/OrgId = BranchGroup/BranchCode/OrgId? 追加肛門の場合はAgencyGroup/Agency/OrgId/text() = BranchGroup/BranchCode/OrgId/text()です。

あなたは違いが必要な場合は、私はあなたがこれらの値を比較する必要があり、その下のコンテキストを知らないが、=オペレータはあなたが探しているものであるAgencyGroup/Agency/OrgId - BranchGroup/BranchCode/OrgId

+0

を処理します この私のXSLTファイルは、私が試した ます。 \tます。 これはfalseを指定しています。 Agency/OrgIdノードのxmlファイルの値が123で、BranchCode/OrgIdも123です。 –

+0

両方とも同じ値を返します。 出力:123 出力:123 サンプルXMLファイルと同じです。 –

3

を検討してください。これはそれらを比較しますが、おそらく必要な文脈ではありません:

<xsl:if 
    test="/G1Export/AgencyGroup/Agency/OrgId = /G1Export/BranchGroup/BranchCode/OrgId"> 
+0

一致:これはfalseを指定しています。私のxmlファイルでAgency/OrgIdノードの値は123で、BranchCode/OrgIdも123 –

+0

です。Agency/OrgIdとBranchCode/OrgIdは両方とも実際の値を返します。そのレベルでは共通の親を持たないためです。私の例では完全なパスを使用してください。それが動作するかどうか教えてください。 – Welbog

+0

しかし、これでも私はfalseを返しています。 –

関連する問題