需要帮助使用 xslt 列出数组中的值

问题描述 投票:0回答:1

需要帮助使用 xslt 列出数组中的值。目前,它们显示为一行一行,需要值才能在数组中显示它们。

附件是源 xml 和 xslt 尝试过但不知道如何使用 xslt。

我需要 PSQ1 的类似输出(注意“响应”是所有元素的静态值。

[{"Response":"可靠和诚实"},{"Response":"结果和经验"},{"Response":"知识和自信"}]

还帮助我获得随机顺序值,例如: [{"Response":"结果和体验"},{"Response":"结果和体验"},{"Response":"可靠和诚实"}]

即使我们有 10 个数据值,也应该以上面的数组格式显示。

提前致谢。

输入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>

我尝试使用下面的 xslt 但无法实现。

<?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>
xslt xslt-2.0 xslt-grouping
1个回答
0
投票

你的问题不太清楚。如果您希望

PSQ1
元素包含当前组响应的 JSON 数组,请尝试:

XSLT 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>

通过发布的输入,这给了我:

<?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>

还帮助我获得随机订单值

XSLT 2.0。不提供随机化节点顺序的本机方法。您也许可以编写自己的随机数生成器,可能使用当前日期时间作为种子。或者升级到 XSLT 3.0,这是一个内置函数:https://www.w3.org/TR/xpath-functions-31/#func-random-number-generator

© www.soinside.com 2019 - 2024. All rights reserved.