Reputation: 1
I have an XML file where data is coming in this way:
<ROOT>
<LINE>
<CODE>ZTAP</CODE>
<TEXT>ZTAP TEXTVALUE</TEXT>
</LINE>
<LINE>
<CODE>TAD</CODE>
<TEXT>TAD TEXTVALUE1</TEXT>
</LINE>
<LINE>
<CODE>TAD</CODE>
<TEXT>TAD TEXTVALUE2</TEXT>
</LINE>
<LINE>
<CODE>ZTAQ</CODE>
</LINE>
<LINE>
<TEXT>ZTAQ TEXT1</TEXT>
</LINE>
<LINE>
<TEXT>ZTAQ TEXT2</TEXT>
</LINE>
</ROOT>
The position of ZTAP and ZTAQ lines can be changed, for example
<ROOT>
<LINE>
<CODE>ZTAQ</CODE>
</LINE>
<LINE>
<TEXT>ZTAQ TEXT1</TEXT>
</LINE>
<LINE>
<TEXT>ZTAQ TEXT2</TEXT>
</LINE>
<LINE>
<CODE>ZTAP</CODE>
<TEXT>ZTAP TEXTVALUE</TEXT>
</LINE>
<LINE>
<CODE>TAD</CODE>
<TEXT>TAD TEXTVALUE1</TEXT>
</LINE>
<LINE>
<CODE>TAD</CODE>
<TEXT>TAD TEXTVALUE2</TEXT>
</LINE>
</ROOT>
I need to pick the ZTAP LINES which i can do easily through template match. but i also need to pick all those LINES whose previous node is ZTAQ. There are few other LINES with TAD CODE which should not be picked, So if i take the 2nd example, then result should be:
ZTAQ TEXT1
ZTAQ TEXT2
ZTAP TEXTVALUE
My preceding sibling statement is mixing with ZTAP and ZTAQ due to other CODE LINES.:
xsl:template match="LINE" mode="test">
<xsl:if test="preceding-sibling::LINE[CODE = 'ZTAQ'] and not(preceding-sibling::LINE[CODE = 'ZTAP'</xsl:if>
</xsl:template>
Could someone help please?
Upvotes: 0
Views: 156
Reputation: 117140
I need to pick the ZTAP LINES which i can do easily through template match. but i also need to pick all those LINES whose previous node is ZTAQ.
If I understand this correctly, you want to call:
<xsl:apply-templates select="LINE[CODE='ZTAP' or not(CODE) and preceding-sibling::LINE[CODE][1]/CODE='ZTAQ']/TEXT"/>
from the context of ROOT.
Upvotes: 0