1

I am new to xslt transformations and we have a requirement of payload transformation using xslt Can you please help me to filter XYZ not containing nodes for the below input

Input:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Test>
<responseStatus>SUCCESS</responseStatus>
<responseDetails>
    <limit>1000</limit>
    <offset>0</offset>
    <size>55</size>
    <total>55</total>
</responseDetails>
<data>
    <row>
        <id>131</id>
        <documentNumber>123</documentNumber>
        <version>131_1_0</version>
        <title__v>test</title__v>
        <document_business_unit__cr.name__v>
            <value>Global XYZ</value>
        </document_business_unit__cr.name__v>
    </row>
    <row>
        <id>131</id>
        <documentNumber>123</documentNumber>
        <version>131_1_0</version>
        <title__v>test</title__v>
        <document_business_unit__cr.name__v>
            <value>Local XYZ</value>
        </document_business_unit__cr.name__v>
    </row>
    <row>
        <id>131</id>
        <documentNumber>123</documentNumber>
        <version>131_1_0</version>
        <title__v>test</title__v>
        <document_business_unit__cr.name__v>
            <value>Global</value>
        </document_business_unit__cr.name__v>
    </row>
</data>
</Test>

Desired Output:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Test>
<responseStatus>SUCCESS</responseStatus>
<responseDetails>
    <limit>1000</limit>
    <offset>0</offset>
    <size>55</size>
    <total>55</total>
</responseDetails>
<data>
    <row>
        <id>131</id>
        <documentNumber>123</documentNumber>
        <version>131_1_0</version>
        <title__v>test</title__v>
        <document_business_unit__cr.name__v>
            <value>Global</value>
        </document_business_unit__cr.name__v>
    </row>
</data>
</Test>

Can you please help me with XSLT code transformation for the above input to desired output

vijay
  • 13
  • 5
  • for this just add an empty template to match `data/row[contains(descendant::value, 'XYZ')]` in your xsl. – sspsujit Aug 25 '21 at 15:55

1 Answers1

1

here you have to block all the row nodes which has text 'XYZ'.

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="xml" indent="yes"/>
  <xsl:strip-space elements="*"/>

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

  <xsl:template match="row[contains(descendant::value, 'XYZ')]"/>

</xsl:stylesheet>
sspsujit
  • 301
  • 4
  • 12