XSLT-如何将垂直数据集转换为具有已定义标题的水平数据集

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

我正在尝试将垂直数据集转换为水平数据集。

数据集:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <Export>
    <Record>
        <D_EmployeeNumber>1</D_EmployeeNumber>
        <D_LastName>A</D_LastName>
        <D_FirstName>Scottie</D_FirstName>
        <D_MiddleName>E</D_MiddleName>
        <D_SocSecYTDWHAmt>306.83</D_SocSecYTDWHAmt>
        <D_MedicareYTDWHAmt>71.76</D_MedicareYTDWHAmt>
        <D_WHType>Main</D_WHType>
        <D_WHName>Main</D_WHName>
        <D_WHAmt>0.00</D_WHAmt>
        <D_EquityAward>True</D_EquityAward>
    </Record>
    <Record>
        <D_EmployeeNumber>2</D_EmployeeNumber>
        <D_LastName>B</D_LastName>
        <D_FirstName>Michael</D_FirstName>
        <D_MiddleName>L</D_MiddleName>
        <D_SocSecYTDWHAmt>311.78</D_SocSecYTDWHAmt>
        <D_MedicareYTDWHAmt>72.92</D_MedicareYTDWHAmt>
        <D_WHType>Main</D_WHType>
        <D_WHName>Main</D_WHName>
        <D_WHAmt>0.00</D_WHAmt>
        <D_EquityAward></D_EquityAward>
    </Record>
    <Record>
        <D_EmployeeNumber>3</D_EmployeeNumber>
        <D_LastName>C</D_LastName>
        <D_FirstName>Kelly</D_FirstName>
        <D_MiddleName>D</D_MiddleName>
        <D_SocSecYTDWHAmt>353.03</D_SocSecYTDWHAmt>
        <D_MedicareYTDWHAmt>82.56</D_MedicareYTDWHAmt>
        <D_WHType>Main</D_WHType>
        <D_WHName>Main</D_WHName>
        <D_WHAmt>0.00</D_WHAmt>
        <D_EquityAward>True</D_EquityAward>
    </Record>
    <Record>
        <D_EmployeeNumber>4</D_EmployeeNumber>
        <D_LastName>D</D_LastName>
        <D_FirstName>Janet</D_FirstName>
        <D_MiddleName>A</D_MiddleName>
        <D_SocSecYTDWHAmt>0.00</D_SocSecYTDWHAmt>
        <D_MedicareYTDWHAmt>0.00</D_MedicareYTDWHAmt>
        <D_WHType>Main</D_WHType>
        <D_WHName>Main</D_WHName>
        <D_WHAmt>0.00</D_WHAmt>
        <D_EquityAward>True</D_EquityAward>
    </Record>
    <Record>
        <D_EmployeeNumber>4</D_EmployeeNumber>
        <D_LastName>D</D_LastName>
        <D_FirstName>Janet</D_FirstName>
        <D_MiddleName>A</D_MiddleName>
        <D_SocSecYTDWHAmt>0.00</D_SocSecYTDWHAmt>
        <D_MedicareYTDWHAmt>0.00</D_MedicareYTDWHAmt>
        <D_WHType>County</D_WHType>
        <D_WHName>FrdrckCoW/H</D_WHName>
        <D_WHAmt>27.42</D_WHAmt>
        <D_EquityAward>True</D_EquityAward>
    </Record>
    <Record>
        <D_EmployeeNumber>5</D_EmployeeNumber>
        <D_LastName>E</D_LastName>
        <D_FirstName>John</D_FirstName>
        <D_MiddleName>E</D_MiddleName>
        <D_SocSecYTDWHAmt>0.00</D_SocSecYTDWHAmt>
        <D_MedicareYTDWHAmt>0.00</D_MedicareYTDWHAmt>
        <D_WHType>Main</D_WHType>
        <D_WHName>Main</D_WHName>
        <D_WHAmt>0.00</D_WHAmt>
        <D_EquityAward>True</D_EquityAward>
    </Record>
    <Record>
        <D_EmployeeNumber>5</D_EmployeeNumber>
        <D_LastName>E</D_LastName>
        <D_FirstName>John</D_FirstName>
        <D_MiddleName>E</D_MiddleName>
        <D_SocSecYTDWHAmt>0.00</D_SocSecYTDWHAmt>
        <D_MedicareYTDWHAmt>0.00</D_MedicareYTDWHAmt>
        <D_WHType>County</D_WHType>
        <D_WHName>WashCoW/H-MD</D_WHName>
        <D_WHAmt>163.18</D_WHAmt>
        <D_EquityAward>True</D_EquityAward>
    </Record>
    <Record>
        <D_EmployeeNumber>6</D_EmployeeNumber>
        <D_LastName>F</D_LastName>
        <D_FirstName>Todd</D_FirstName>
        <D_MiddleName>E</D_MiddleName>
        <D_SocSecYTDWHAmt>709.69</D_SocSecYTDWHAmt>
        <D_MedicareYTDWHAmt>165.98</D_MedicareYTDWHAmt>
        <D_WHType>Main</D_WHType>
        <D_WHName>Main</D_WHName>
        <D_WHAmt>0.00</D_WHAmt>
        <D_EquityAward>True</D_EquityAward>
    </Record>
    <Record>
        <D_EmployeeNumber>6</D_EmployeeNumber>
        <D_LastName>F</D_LastName>
        <D_FirstName>Todd</D_FirstName>
        <D_MiddleName>E</D_MiddleName>
        <D_SocSecYTDWHAmt>709.69</D_SocSecYTDWHAmt>
        <D_MedicareYTDWHAmt>165.98</D_MedicareYTDWHAmt>
        <D_WHType>Township</D_WHType>
        <D_WHName>BtlrTwpW/H-L</D_WHName>
        <D_WHAmt>120.00</D_WHAmt>
        <D_EquityAward>True</D_EquityAward>
    </Record>
        <Record>
        <D_EmployeeNumber>7</D_EmployeeNumber>
        <D_LastName>G</D_LastName>
        <D_FirstName>Melissa</D_FirstName>
        <D_MiddleName>L</D_MiddleName>
        <D_SocSecYTDWHAmt>0.00</D_SocSecYTDWHAmt>
        <D_MedicareYTDWHAmt>0.00</D_MedicareYTDWHAmt>
        <D_WHType>Main</D_WHType>
        <D_WHName>Main</D_WHName>
        <D_WHAmt>0.00</D_WHAmt>
        <D_EquityAward>True</D_EquityAward>
    </Record>
    <Record>
        <D_EmployeeNumber>7</D_EmployeeNumber>
        <D_LastName>G</D_LastName>
        <D_FirstName>Melissa</D_FirstName>
        <D_MiddleName>L</D_MiddleName>
        <D_SocSecYTDWHAmt>0.00</D_SocSecYTDWHAmt>
        <D_MedicareYTDWHAmt>0.00</D_MedicareYTDWHAmt>
        <D_WHType>County</D_WHType>
        <D_WHName>FrdrckCoW/H</D_WHName>
        <D_WHAmt>122.74</D_WHAmt>
        <D_EquityAward>True</D_EquityAward>
    </Record>
    </Export>

我尝试了很多事情,我的眼睛突然冒出来。

这是我最新的XSLT

    <xsl:stylesheet  version="1.0"
                 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:msxsl="urn:schemas-microsoft-com:xslt"
                xmlns:vb="urn:the-xml-files:xslt-vb"
                xmlns:cs="urn:cs">


    <msxsl:script language="VBScript" implements-prefix="vb" >
      <msxsl:using namespace="System.IO"/>


    <![CDATA[               

       ]]>

    </msxsl:script>
    <xsl:output method="text" indent="no"/>

    <xsl:template match="/">

    <xsl:variable name="CountyRecords">
            <Records>
                <xsl:for-each select="Export/Record[(D_EquityAward = 'True' and D_WHType ='County' and D_WHAmt != 0.00)]"> <!-- Only County and Equity -->
                    <Record>
                        <xsl:element name="EmpNumber">
                            <xsl:copy-of select="D_EmployeeNumber"/>
                        </xsl:element>
                        <xsl:element name="CountyWHName">
                            <xsl:copy-of select="D_WHName"/>
                        </xsl:element>
                    </Record>         
                </xsl:for-each>
            </Records>
    </xsl:variable> 

        <xsl:variable name="CityRecords">
            <Records>
                <xsl:for-each select="Export/Record[(D_EquityAward = 'True' and D_WHType ='City' and D_WHAmt != 0.00)]"> <!-- Only County and Equity -->
                    <Record>
                        <xsl:element name="EmpNumber">
                            <xsl:value-of select="D_EmployeeNumber"/>
                        </xsl:element>
                        <xsl:element name="CityWHName">
                            <xsl:value-of select="D_WHName"/>
                        </xsl:element>
                    </Record>         
                </xsl:for-each>
            </Records>
    </xsl:variable> 

        <xsl:variable name="BoroughRecords">
            <Records>
                <xsl:for-each select="Export/Record[(D_EquityAward = 'True' and D_WHType ='Borough' and D_WHAmt != 0.00)]"> <!-- Only County and Equity -->
                    <Record>
                        <xsl:element name="EmpNumber">
                            <xsl:value-of select="D_EmployeeNumber"/>
                        </xsl:element>
                        <xsl:element name="BoroughWHName">
                            <xsl:value-of select="D_WHName"/>
                        </xsl:element>
                    </Record>         
                </xsl:for-each>
            </Records>
    </xsl:variable> 

        <xsl:variable name="TownshipRecords">
            <Records>
                <xsl:for-each select="Export/Record[(D_EquityAward = 'True' and D_WHType ='Township' and D_WHAmt != 0.00)]"> <!-- Only County and Equity -->
                    <Record>
                        <xsl:element name="EmpNumber">
                            <xsl:value-of select="D_EmployeeNumber"/>
                        </xsl:element>
                        <xsl:element name="TownshipWHName">
                            <xsl:value-of select="D_WHName"/>
                        </xsl:element>
                    </Record>         
                </xsl:for-each>
            </Records>
    </xsl:variable> 


     <xsl:for-each select="Export/Record[(D_EquityAward = 'True' and D_WHType ='Main')]">
            <xsl:value-of select="D_EmployeeNumber"/>
            <xsl:text>,</xsl:text>
            <xsl:value-of select="D_LastName"/>
            <xsl:text>,</xsl:text>
            <xsl:value-of select="D_FirstName"/>
            <xsl:text>,</xsl:text>
            <xsl:value-of select="D_MiddleName"/>
            <xsl:text>,</xsl:text>
            <xsl:if test="(./D_EmployeeNumber= msxsl:node-set($CountyRecords)/Records/Record/EmpNumber)">
                <xsl:value-of select="msxsl:node-set($CountyRecords)/Records/Record/CountyWHName" />
            </xsl:if>
            <xsl:text>,</xsl:text>
            <xsl:if test="(./D_EmployeeNumber = msxsl:node-set($CityRecords)/Records/Record/EmpNumber)">
                <xsl:value-of select="msxsl:node-set($CityRecords)/Records/Record/CityWHName" />
            </xsl:if>
            <xsl:text>,</xsl:text>
            <xsl:if test="(./D_EmployeeNumber = msxsl:node-set($TownshipRecords)/Records/Record/EmpNumber)">
                <xsl:value-of select="msxsl:node-set($TownshipRecords)/Records/Record/TownshipWHName" />
            </xsl:if>
            <xsl:text>,</xsl:text>
            <xsl:if test="(./D_EmployeeNumber = msxsl:node-set($BoroughRecords)/Records/Record/EmpNumber)">
                <xsl:value-of select="msxsl:node-set($BoroughRecords)/Records/Record/BoroughWHName" />
            </xsl:if>
            <xsl:text>&#xD;&#xA;</xsl:text>                           
            </xsl:for-each>

        </xsl:template>
    </xsl:stylesheet>

预期结果:

1,A,Scottie,E,,,,
3,C,Kelly,D,,,,
4,D,Janet,A,FrdrckCoW/H,,,
5,E,John,E,WashCoW/H-MD,,,
6,F,Todd,E,,,WashCoW/H-MD,
7,G,Melissa,L,FrdrckCoW/H,,,

我在这里所做的是根据每种税收类型创建节点集,然后在我的最终For Each中将其链接到特定节点集(如果员工具有其中一种税收类型。

我这样做的问题是,我只能在节点集的第一行中获得该值。

有人对此有解决方案吗?

谢谢-史蒂夫

xml xslt xslt-1.0
1个回答
0
投票
XSLT 1.0
© www.soinside.com 2019 - 2024. All rights reserved.