Need help to list the values in Array using xslt. Currently, they are showing as one row by another and need the values to show them in array.
Attached is the source xml and xslt tried but not sure how to do with xslt.
I need the output something like this for PSQ1 (note "Response" is a static value for all the elements.
[{"Response":"Dependable and Honest"},{"Response":"Results and Experience"},{"Response":"knowledge and confident"}]
and also help me to get random order values ex: [{"Response":"Results and Experience"},{"Response":"Results and Experience"},{"Response":"Dependable and Honest"}]
Even If we have 10 data values, this should be shown in the above format in array.
Thanks in advance.
Input xsml:
<wd:Report_Data
xmlns:wd="urn:com.workday/bsvc">
<wd:Report_Entry>
<wd:empid>123</wd:empid>
<wd:tempno>2</wd:tempno>
<wd:category>Peer/Stakeholder</wd:category>
<wd:questionno>1</wd:questionno>
<wd:response>
<p>Dependable and Honest</p>
</wd:response>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:empid>123</wd:empid>
<wd:tempno>2</wd:tempno>
<wd:category>Peer/Stakeholder</wd:category>
<wd:questionno>2</wd:questionno>
<wd:response>
<p>Results</p>
</wd:response>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:empid>123</wd:empid>
<wd:tempno>2</wd:tempno>
<wd:category>Peer/Stakeholder</wd:category>
<wd:questionno>3</wd:questionno>
<wd:response>8</wd:response>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:empid>123</wd:empid>
<wd:tempno>2</wd:tempno>
<wd:category>Peer/Stakeholder</wd:category>
<wd:questionno>4</wd:questionno>
<wd:response>9</wd:response>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:empid>456</wd:empid>
<wd:tempno>1</wd:tempno>
<wd:category>Peer/Stakeholder</wd:category>
<wd:questionno>1</wd:questionno>
<wd:response>
<p>Flexibility and Open-Minded</p>
</wd:response>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:empid>456</wd:empid>
<wd:tempno>1</wd:tempno>
<wd:category>Peer/Stakeholder</wd:category>
<wd:questionno>2</wd:questionno>
<wd:response>
<p>Transparency</p>
</wd:response>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:empid>456</wd:empid>
<wd:tempno>1</wd:tempno>
<wd:category>Peer/Stakeholder</wd:category>
<wd:questionno>3</wd:questionno>
<wd:response>9</wd:response>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:empid>456</wd:empid>
<wd:tempno>1</wd:tempno>
<wd:category>Peer/Stakeholder</wd:category>
<wd:questionno>4</wd:questionno>
<wd:response>10</wd:response>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:empid>123</wd:empid>
<wd:tempno>2</wd:tempno>
<wd:category>Peer/Stakeholder</wd:category>
<wd:questionno>1</wd:questionno>
<wd:response>
<p>Results and Experience</p>
</wd:response>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:empid>123</wd:empid>
<wd:tempno>2</wd:tempno>
<wd:category>Peer/Stakeholder</wd:category>
<wd:questionno>2</wd:questionno>
<wd:response>
<p>Efficient</p>
</wd:response>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:empid>123</wd:empid>
<wd:tempno>2</wd:tempno>
<wd:category>Peer/Stakeholder</wd:category>
<wd:questionno>3</wd:questionno>
<wd:response>6</wd:response>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:empid>123</wd:empid>
<wd:tempno>2</wd:tempno>
<wd:category>Peer/Stakeholder</wd:category>
<wd:questionno>4</wd:questionno>
<wd:response>4</wd:response>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:empid>456</wd:empid>
<wd:tempno>1</wd:tempno>
<wd:category>Direct Report</wd:category>
<wd:questionno>1</wd:questionno>
<wd:response>
<p>intentional and open</p>
</wd:response>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:empid>456</wd:empid>
<wd:tempno>1</wd:tempno>
<wd:category>Direct Report</wd:category>
<wd:questionno>2</wd:questionno>
<wd:response>
<p>Change</p>
</wd:response>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:empid>456</wd:empid>
<wd:tempno>1</wd:tempno>
<wd:category>Direct Report</wd:category>
<wd:questionno>3</wd:questionno>
<wd:response>5</wd:response>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:empid>456</wd:empid>
<wd:tempno>1</wd:tempno>
<wd:category>Direct Report</wd:category>
<wd:questionno>4</wd:questionno>
<wd:response>6</wd:response>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:empid>456</wd:empid>
<wd:tempno>1</wd:tempno>
<wd:category>Peer/Stakeholder</wd:category>
<wd:questionno>1</wd:questionno>
<wd:response>
<p>Team Leader and Flexibility</p>
</wd:response>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:empid>456</wd:empid>
<wd:tempno>1</wd:tempno>
<wd:category>Peer/Stakeholder</wd:category>
<wd:questionno>2</wd:questionno>
<wd:response>
<p>Collaborator</p>
</wd:response>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:empid>456</wd:empid>
<wd:tempno>1</wd:tempno>
<wd:category>Peer/Stakeholder</wd:category>
<wd:questionno>3</wd:questionno>
<wd:response>10</wd:response>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:empid>456</wd:empid>
<wd:tempno>1</wd:tempno>
<wd:category>Peer/Stakeholder</wd:category>
<wd:questionno>4</wd:questionno>
<wd:response>10</wd:response>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:empid>123</wd:empid>
<wd:tempno>2</wd:tempno>
<wd:category>Peer/Stakeholder</wd:category>
<wd:questionno>1</wd:questionno>
<wd:response>
<p>knowledge and confident</p>
</wd:response>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:empid>123</wd:empid>
<wd:tempno>2</wd:tempno>
<wd:category>Peer/Stakeholder</wd:category>
<wd:questionno>2</wd:questionno>
<wd:response>
<p>stretch</p>
</wd:response>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:empid>123</wd:empid>
<wd:tempno>2</wd:tempno>
<wd:category>Peer/Stakeholder</wd:category>
<wd:questionno>3</wd:questionno>
<wd:response>8</wd:response>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:empid>123</wd:empid>
<wd:tempno>2</wd:tempno>
<wd:category>Peer/Stakeholder</wd:category>
<wd:questionno>4</wd:questionno>
<wd:response>6</wd:response>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:empid>456</wd:empid>
<wd:tempno>1</wd:tempno>
<wd:category>Direct Report</wd:category>
<wd:questionno>1</wd:questionno>
<wd:response>
<p>Agility and Transparency</p>
</wd:response>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:empid>456</wd:empid>
<wd:tempno>1</wd:tempno>
<wd:category>Direct Report</wd:category>
<wd:questionno>2</wd:questionno>
<wd:response>
<p>Change Management and Exposure</p>
</wd:response>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:empid>456</wd:empid>
<wd:tempno>1</wd:tempno>
<wd:category>Direct Report</wd:category>
<wd:questionno>3</wd:questionno>
<wd:response>4</wd:response>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:empid>456</wd:empid>
<wd:tempno>1</wd:tempno>
<wd:category>Direct Report</wd:category>
<wd:questionno>4</wd:questionno>
<wd:response>5</wd:response>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:empid>456</wd:empid>
<wd:tempno>1</wd:tempno>
<wd:category>Direct Report</wd:category>
<wd:questionno>1</wd:questionno>
<wd:response>
<p>Fearless and Collaborator</p>
</wd:response>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:empid>456</wd:empid>
<wd:tempno>1</wd:tempno>
<wd:category>Direct Report</wd:category>
<wd:questionno>2</wd:questionno>
<wd:response>
<p>Strategy and Transparency</p>
</wd:response>
</wd:Report_Entry>
</wd:Report_Data>
I tried with the below xslt but could not achieved it.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:is="java:com.workday.esb.intsys.xpath.ParsedIntegrationSystemFunctions"
xmlns:xdiff="urn:com.workday/esb/xdiff"
xmlns:wd="urn:com.workday/bsvc">
<xsl:output method="xml" indent="yes" omit-xml-declaration="no"/>
<xsl:template match="/">
<Report_Data>
<xsl:apply-templates select="wd:Report_Data"/>
</Report_Data>
</xsl:template>
<xsl:template match="wd:Report_Data">
<xsl:for-each-group select="wd:Report_Entry" group-by="wd:empid">
<Report_Entry>
<empid>
<xsl:value-of select="wd:empid"/>
</empid>
<tempno>
<xsl:value-of select="wd:tempno"/>
</tempno>
<PSQ1>
<xsl:for-each
select="current-group()[wd:category = 'Peer/Stakeholder' and wd:questionno = '1']">
<xsl:value-of select="wd:response"/>
</xsl:for-each>
</PSQ1>
</Report_Entry>
</xsl:for-each-group>
</xsl:template>
</xsl:stylesheet>
Your question is not very clear. If you want the PSQ1
element to contain a JSON array of the current group's responses, try:
XSLT version 2.0:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xpath-default-namespace="urn:com.workday/bsvc">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/Report_Data">
<Report_Data>
<xsl:for-each-group select="Report_Entry" group-by="empid">
<Report_Entry>
<empid>
<xsl:value-of select="empid"/>
</empid>
<tempno>
<xsl:value-of select="tempno"/>
</tempno>
<PSQ1>
<xsl:text>[</xsl:text>
<xsl:for-each select="current-group()[category='Peer/Stakeholder' and questionno='1']">
<xsl:text>{"Response":"</xsl:text>
<xsl:value-of select="response/*"/>
<xsl:text>"}</xsl:text>
<xsl:if test="position()!=last()">,</xsl:if>
</xsl:for-each>
<xsl:text>]</xsl:text>
</PSQ1>
</Report_Entry>
</xsl:for-each-group>
</Report_Data>
</xsl:template>
</xsl:stylesheet>
With the posted input, this gives me:
<?xml version="1.0" encoding="UTF-8"?>
<Report_Data>
<Report_Entry>
<empid>123</empid>
<tempno>2</tempno>
<PSQ1>[{"Response":"Dependable and Honest"},{"Response":"Results and Experience"},{"Response":"knowledge and confident"}]</PSQ1>
</Report_Entry>
<Report_Entry>
<empid>456</empid>
<tempno>1</tempno>
<PSQ1>[{"Response":"Flexibility and Open-Minded"},{"Response":"Team Leader and Flexibility"}]</PSQ1>
</Report_Entry>
</Report_Data>
and also help me to get random order values
XSLT 2.0. does not provide a native way to randomize the order of nodes. You may be able to write your own randomizer, possibly using the current dateTime as the seed. Or upgrade to XSLT 3.0, where this is a built-in function: https://www.w3.org/TR/xpath-functions-31/#func-random-number-generator.