我有两个源架构和一个目标。我想将Source 1与Source 2进行比较,并将源2中的非匹配数据映射到目标。
下面是我的内联XSLT,但我没有得到预期的输出。看起来它正在映射来自Source 2的所有数据
这是做正确的方式吗?不等于"在XSLT中?
第一个片段是架构;第二个片段是XSLT。
<!- Source Schema 2-->
<?xml version="1.0" encoding="utf-8"?>
<ns0:INT_XROOT xmlns:ns0="http://Append_WAW_Files.Schema_INT_XML">
<INT_XDATA>
<BranchIdentifier>EMPLOYEE PLAN</BranchIdentifier>
<Insured>Kyle Foster</Insured>
<PolicyNumber>7V5230758</PolicyNumber>
<EffectiveDate>03/01/2013</EffectiveDate>
<TransType>BTC</TransType>
<CommPercent>12.5</CommPercent>
<CommAmount>-124.50</CommAmount>
<PremiumAmount>-996.00</PremiumAmount>
</INT_XDATA>
<INT_XDATA>
<BranchIdentifier>EMPLOYEE PLAN</BranchIdentifier>
<Insured>MILLER, VICKI & RICHAR</Insured>
<PolicyNumber>702572173</PolicyNumber>
<EffectiveDate>02/06/2014</EffectiveDate>
<TransType>RNR</TransType>
<CommPercent>5.0</CommPercent>
<CommAmount>8.65</CommAmount>
<PremiumAmount>-173.00</PremiumAmount>
</INT_XDATA>
<TxnID>1</TxnID>
</ns0:INT_XROOT>
<!- Source Schema 1-->
?xml version="1.0" encoding="utf-8"?>
<ns0:TAM_XROOT xmlns:ns0="http://Append_WAW_Files.Schema.TAM_Output_XML">
<TAM_XDATA>
<Source>TAM</Source>
<MonthStatement>201402</MonthStatement>
<BranchIdentifier/>
<Region>NAB</Region>
<BillType/>
<Insured>Kyle Foster</Insured>
<PolicyNumber>7V5230758</PolicyNumber>
<EffectiveDate>03/01/2013</EffectiveDate>
<TransType>-EN</TransType>
<CommPercent>12.5</CommPercent>
<CommAmount>-124.50</CommAmount>
<PremiumAmount>-996.00</PremiumAmount>
<CompanyCode>WAW</CompanyCode>
<Status/>
<Notes/>
<MonthProduction/>
<CustomerRec>FOSTKY1</CustomerRec>
<Item>9G6B54</Item>
<Desc/>
<LongPolicyNumber/>
</TAM_XDATA>
<TAM_XDATA>
<Source>TAM</Source>
<MonthStatement>201402</MonthStatement>
<BranchIdentifier/>
<Region>NAB</Region>
<BillType/>
<Insured>Bengu Karahasan</Insured>
<PolicyNumber>RMZBNG8581</PolicyNumber>
<EffectiveDate>03/02/2015</EffectiveDate>
<TransType>+EN</TransType>
<CommPercent>12.0</CommPercent>
<CommAmount>200.20</CommAmount>
<PremiumAmount>350.00</PremiumAmount>
<CompanyCode>WAW</CompanyCode>
<Status/>
<Notes/>
<MonthProduction/>
<CustomerRec>FOSTKY1</CustomerRec>
<Item>9G6B5B</Item>
<Desc/>
<LongPolicyNumber/>
</TAM_XDATA>
<TxnID>1</TxnID>
</ns0:TAM_XROOT>
<Schema>
Root
INT_DATA
Source
MonthStatement
BranchIdentifier
Region
BillType
Insured
PolicyNumber
EffectiveDate
TransType
CommPercent
CommAmount
PremiumAmount
CompanyCode
Status
Notes
MonthProduction
CustomerRec
Item
Desc
LongPolicyNumber
<xsl:template name="ValidateTransactionData">
<!-- Loop MessagePart_0 -->
<xsl:for-each select="InputMessagePart_0/s1:INT_XROOT/INT_XDATA">
<!-- Create "Matching_DATA" record in the output message for each matching transaction-->
<xsl:variable name="s1_PolicyNumber" select="PolicyNumber"/>
<xsl:variable name="s1_EffectiveDate" select="EffectiveDate"/>
<xsl:variable name="s1_CommPercent" select="CommPercent"/>
<xsl:variable name="s1_CommAmount" select="CommAmount"/>
<xsl:variable name="s1_PremiumAmount" select="PremiumAmount"/>
<!-- Loop InputMessagePart_1 and validate matching long policy number -->
<xsl:for-each select="../../../InputMessagePart_1/s0:TAM_XROOT/TAM_XDATA">
<xsl:variable name="s0_PolicyNumber" select="PolicyNumber"/>
<xsl:variable name="s0_EffectiveDate" select="EffectiveDate"/>
<xsl:variable name="s0_CommPercent" select="CommPercent"/>
<xsl:variable name="s0_CommAmount" select="CommAmount"/>
<xsl:variable name="s0_PremiumAmount" select="PremiumAmount"/>
<xsl:if test="($s0_PolicyNumber != $s1_PolicyNumber) or (s0_EffectiveDate != $s1_EffectiveDate) or (s0_CommPercent != $s1_CommPercent) or (s0_CommAmount != $s1_CommAmount) or (s0_PremiumAmount != $s1_PremiumAmount)">
<INT_UDATA>
<Source>
<xsl:value-of select="Source" />
</Source>
<MonthStatement>
<xsl:value-of select="MonthStatement" />
</MonthStatement>
<BranchIdentifier>
<xsl:value-of select="BranchIdentifier" />
</BranchIdentifier>
<Region>
<xsl:value-of select="Region" />
</Region>
<BillType>
<xsl:value-of select="BillType" />
</BillType>
<Insured>
<xsl:value-of select="Insured" />
</Insured>
<PolicyNumber>
<xsl:value-of select="PolicyNumber" />
</PolicyNumber >
<EffectiveDate>
<xsl:value-of select="EffectiveDate" />
</EffectiveDate >
<CommPercent>
<xsl:value-of select="CommPercent" />
</CommPercent>
<CommAmount>
<xsl:value-of select="CommAmount" />
</CommAmount>
<PremiumAmount>
<xsl:value-of select="PremiumAmount" />
</PremiumAmount>
<CompanyCode>
<xsl:value-of select="CompanyCode" />
</CompanyCode>
<Status>
<xsl:value-of select="Status" />
</Status>
<Notes>
<xsl:value-of select="Notes" />
</Notes>
<MonthProduction>
<xsl:value-of select="MonthProduction" />
</MonthProduction>
<CustomerRec>
<xsl:value-of select="CustomerRec" />
</CustomerRec>
<Item>
<xsl:value-of select="Item" />
</Item>
<Desc>
<xsl:value-of select="Desc" />
</Desc>
</INT_UDATA >
<xsl:value-of select="./text()" />
</xsl:if>
</xsl:for-each >
<xsl:value-of select="./text()" />
</xsl:for-each>
<xsl:value-of select="./text()" />
</xsl:template >
答案 0 :(得分:0)
检查条件
<xsl:if test="($s0_PolicyNumber != $s1_PolicyNumber) or (s0_EffectiveDate != $s1_EffectiveDate) or (s0_CommPercent != $s1_CommPercent) or (s0_CommAmount != $s1_CommAmount) or (s0_PremiumAmount != $s1_PremiumAmount)">
某些地方缺少“$”。
答案 1 :(得分:0)
尝试将所有字符串连接在一起并进行比较。
例如:
<xsl:variable name="s0" select="concat(s0_PolicyNumber, s0_EffectiveDate, s0_CommPercent, s0_CommAmount, s0_PremiumAmount)"/>
<xsl:variable name="s1" select="concat(s1_PolicyNumber, s1_EffectiveDate, s1_CommPercent, s1_CommAmount, s1_PremiumAmount)"/>
<xsl:if test="$s0 != $s1">
...
</xsl:if>