Rams
Rams

Reputation: 39

How to select an attribute based on another attribute's value

I need to select the NativeDescription value when Credit_Term_Code="4" by looping in XSLT:

<Credit_code_parents>
  <Credit_Term_parent Credit_Term_Code="1" NativeDescription="Letter of Credit" EnglishDescription="Letter of Credit" />
  <Credit_Term_parent Credit_Term_Code="2" NativeDescription="Cash on Delivery" EnglishDescription="Cash on Delivery" />
  <Credit_Term_parent Credit_Term_Code="3" NativeDescription="Contract" EnglishDescription="Contract" />
  <Credit_Term_parent Credit_Term_Code="4" NativeDescription="Net" EnglishDescription="Net" />
  <Credit_Term_parent Credit_Term_Code="5" NativeDescription="Contract" EnglishDescription="Contract" />
  <Credit_Term_parent Credit_Term_Code="6" NativeDescription="Net" EnglishDescription="Net" />
  <Credit_Term_parent Credit_Term_Code="7" NativeDescription="Contract" EnglishDescription="Contract" />
  <Credit_Term_parent Credit_Term_Code="8" NativeDescription="Net" EnglishDescription="Net" />
</Credit_code_parents>

Upvotes: 3

Views: 3196

Answers (2)

kjhughes
kjhughes

Reputation: 111491

To select the NativeDescription attribute of the Credit_Term_parent element with a Credit_Term_Code equal to 4, use one of the following XPaths:

  1. If the ancestral structure above Credit_Term_parent is fixed as shown:

    /Credit_code_parents/Credit_Term_parent[@Credit_Term_Code='4']/@NativeDescription
    
  2. If there's potentially variable ancestral structure above Credit_Term_parent (and assuming that the provided Credit_Term_Code is unique across the document):

    //Credit_Term_parent[@Credit_Term_Code='4']/@NativeDescription
    

You ask for XSLT looping code:

<xsl:for-each select="/Credit_code_parents/Credit_Term_parent">
   <xsl:if test="@Credit_Term_Code=4">
     <xsl:value-of select="@Credit_Term_parent"/>
   </xsl:if>
</xsl:for-each>

Or, without the loop:

 <xsl:value-of
          select="//Credit_Term_parent[@Credit_Term_Code='4']/@NativeDescription"/>

...or, alternatively, use the XPath from #1 above instead of the one from #2.

Upvotes: 3

Saurav
Saurav

Reputation: 640

try the following

<xsl:for-each select="Credit_code_parents/Credit_Term_parent">
  <xsl:variable name="temp" select="@Credit_Term_Code"/>
  <xsl:if test="$temp='1'">
    <check>
      <xsl:value-of select="@NativeDescription"/>
    </check>
  </xsl:if>
</xsl:for-each>

Hope that helps.

Upvotes: 0

Related Questions