BizTalk XSLT +如果不相等则不起作用

时间:2014-11-20 16:04:21

标签: xslt biztalk

我有两个源架构和一个目标。我想将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 &amp; 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 >

2 个答案:

答案 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>