Я пытаюсь преобразовать вертикальный набор данных в горизонтальный набор данных.
Набор данных:
<?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>
</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,,,
Здесь я создал наборы узлов на основе каждого типа налога, а затем в моем окончание Для каждого свяжите их с указанным c набором узлов, если у сотрудника есть один из этих типов налогов.
Проблема, которую я делаю таким образом, заключается в том, что я получаю значение только в первой строке моего набор узлов.
У кого-нибудь есть решение для этого?
Спасибо - Стив