2
我是XSLT新手。 我正在爲人員獲取重複的WaitingPeriodStatus節點,如下面的當前輸出示例所示。 我需要得到每個人的WaitingPeriodStatus,如預期的輸出。使用XSLT進行XML轉換
輸入XML:
<ns0:Root xmlns:ns0="http://schemas.microsoft.com/BizTalk/2003/aggschema">
<InputMessagePart_0>
<ns0:GetWebActiveWaitingPeriodsResponse xmlns:ns0="http://schemas.company.com.au/es/product/getwebactivewaitingperiods/2015/05">
<WaitingPeriodIDs>
<WaitingPeriodID>0M</WaitingPeriodID>
<WaitingPeriodID>Hear</WaitingPeriodID>
<WaitingPeriodID>Laser</WaitingPeriodID>
</WaitingPeriodIDs>
</ns0:GetWebActiveWaitingPeriodsResponse>
</InputMessagePart_0>
<InputMessagePart_1>
<ns1:GetMembershipWaitingPeriodStatusesResponse
xmlns:ns1="http://schemas.company.com/cp/membership/getmembershipwaitingperiodstatuses/2014/06"
xmlns:ns0="http://schemas.company.com/cp/membership/waitingperiodstatuses/2014/06>
<ns0:MembershipPersons>
<ns0:MembershipPerson>
<ns0:PersonId>133279</ns0:PersonId>
<ns0:TitleCode>Ms </ns0:TitleCode>
<ns0:GivenName>Elizabeth</ns0:GivenName>
<ns0:MiddleName>Clare Kurth</ns0:MiddleName>
<ns0:SurName>Smith</ns0:SurName>
<ns0:WaitingPeriodStatuses>
<wp:WaitingPeriodStatuses xmlns:wp="http://schemas.company.com/cp/membership/waitingperiodstatuses/2014/06">
<wp:WaitingPeriodStatus>
<wp:MemberId>262016</wp:MemberId>
<wp:PersonId>133279</wp:PersonId>
<wp:EffDate>2015-05-18T00:00:00</wp:EffDate>
<wp:WaitingPeriodCode>Hear</wp:WaitingPeriodCode>
<wp:Status>Waiting</wp:Status>
<wp:StartDate>2017-01-05</wp:StartDate>
<wp:EndDate>2019-01-05</wp:EndDate>
<wp:WaitingPeriodDescription>Hearing Aids</wp:WaitingPeriodDescription>
<wp:WaitingPeriodWaiveDescription/>
<wp:WaitingPeriod>24</wp:WaitingPeriod>
<wp:WaitingPeriodUnit>Months</wp:WaitingPeriodUnit>
</wp:WaitingPeriodStatus>
</wp:WaitingPeriodStatuses>
</ns0:WaitingPeriodStatuses>
</ns0:MembershipPerson>
<ns0:MembershipPerson>
<ns0:PersonId>134259</ns0:PersonId>
<ns0:GivenName>Majed</ns0:GivenName>
<ns0:MiddleName>John</ns0:MiddleName>
<ns0:SurName>Song</ns0:SurName>
<ns0:WaitingPeriodStatuses>
<wp:WaitingPeriodStatuses xmlns:wp="http://schemas.company.com/cp/membership/waitingperiodstatuses/2014/06">
<wp:WaitingPeriodStatus>
<wp:MemberId>262016</wp:MemberId>
<wp:PersonId>134259</wp:PersonId>
<wp:EffDate>2017-01-05T00:00:00</wp:EffDate>
<wp:WaitingPeriodCode>Laser</wp:WaitingPeriodCode>
<wp:Status>WaitingTerminated</wp:Status>
<wp:StartDate>2017-01-05</wp:StartDate>
<wp:EndDate>2019-01-05</wp:EndDate>
<wp:WaitingPeriodDescription>Laser Eye Surgery</wp:WaitingPeriodDescription>
<wp:WaitingPeriodWaiveDescription/>
<wp:WaitingPeriod>24</wp:WaitingPeriod>
<wp:WaitingPeriodUnit>Months</wp:WaitingPeriodUnit>
</wp:WaitingPeriodStatus>
</wp:WaitingPeriodStatuses>
</ns0:WaitingPeriodStatuses>
</ns0:MembershipPerson>
</ns0:MembershipPersons>
</ns1:GetMembershipWaitingPeriodStatusesResponse>
</InputMessagePart_1>
</ns0:Root>
電流輸出:
<ns1:GetMembershipWaitingPeriodStatusesResponse xmlns:ns1="http://schemas.company.com/bp/membership/getmembershipwaitingperiodstatuses/2015/05" xmlns:ns0="http://schemas.company.com/bp/membership/getmembershipwaitingperiodstatuses/membershipperson/2015/05">
<MembershipPersons>
<MembershipPerson>
<ns0:PersonId>133279</ns0:PersonId>
<ns0:TitleCode>Ms </ns0:TitleCode>
<ns0:GivenName>Elizabeth</ns0:GivenName>
<ns0:MiddleName>Clare Kurth</ns0:MiddleName>
<ns0:Surname>Smith</ns0:Surname>
<mp:WaitingPeriodStatuses xmlns:mp="http://schemas.company.com/bp/membership/getmembershipwaitingperiodstatuses/membershipperson/2015/05">
<mp:WaitingPeriodStatus>
<mp:WaitingPeriodCode>Hear</mp:WaitingPeriodCode>
<mp:WaitingPeriod>24</mp:WaitingPeriod>
<mp:WaitingPeriodUnit>Months</mp:WaitingPeriodUnit>
<mp:WaitingPeriodDescription>Hearing Aids</mp:WaitingPeriodDescription>
<mp:WaitingPeriodStatus>Waiting</mp:WaitingPeriodStatus>
<mp:StartDate>2017-01-05</mp:StartDate>
<mp:EndDate>2019-01-05</mp:EndDate>
</mp:WaitingPeriodStatus>
<mp:WaitingPeriodStatus>
<mp:WaitingPeriodCode>Laser</mp:WaitingPeriodCode>
<mp:WaitingPeriod>24</mp:WaitingPeriod>
<mp:WaitingPeriodUnit>Months</mp:WaitingPeriodUnit>
<mp:WaitingPeriodDescription>Laser Eye Surgery</mp:WaitingPeriodDescription>
<mp:WaitingPeriodStatus>WaitingTerminated</mp:WaitingPeriodStatus>
<mp:StartDate>2017-01-05</mp:StartDate>
<mp:EndDate>2019-01-05</mp:EndDate>
</mp:WaitingPeriodStatus>
</mp:WaitingPeriodStatuses>
</MembershipPerson>
<MembershipPerson>
<ns0:PersonId>134259</ns0:PersonId>
<ns0:GivenName>Majed</ns0:GivenName>
<ns0:MiddleName>John</ns0:MiddleName>
<ns0:Surname>Song</ns0:Surname>
<mp:WaitingPeriodStatuses xmlns:mp="http://schemas.company.com/bp/membership/getmembershipwaitingperiodstatuses/membershipperson/2015/05">
<mp:WaitingPeriodStatus>
<mp:WaitingPeriodCode>Hear</mp:WaitingPeriodCode>
<mp:WaitingPeriod>24</mp:WaitingPeriod>
<mp:WaitingPeriodUnit>Months</mp:WaitingPeriodUnit>
<mp:WaitingPeriodDescription>Hearing Aids</mp:WaitingPeriodDescription>
<mp:WaitingPeriodStatus>Waiting</mp:WaitingPeriodStatus>
<mp:StartDate>2017-01-05</mp:StartDate>
<mp:EndDate>2019-01-05</mp:EndDate>
</mp:WaitingPeriodStatus>
<mp:WaitingPeriodStatus>
<mp:WaitingPeriodCode>Laser</mp:WaitingPeriodCode>
<mp:WaitingPeriod>24</mp:WaitingPeriod>
<mp:WaitingPeriodUnit>Months</mp:WaitingPeriodUnit>
<mp:WaitingPeriodDescription>Laser Eye Surgery</mp:WaitingPeriodDescription>
<mp:WaitingPeriodStatus>WaitingTerminated</mp:WaitingPeriodStatus>
<mp:StartDate>2017-01-05</mp:StartDate>
<mp:EndDate>2019-01-05</mp:EndDate>
</mp:WaitingPeriodStatus>
</mp:WaitingPeriodStatuses>
</MembershipPerson>
</MembershipPersons>
</ns1:GetMembershipWaitingPeriodStatusesResponse>
預期輸出:
<ns1:GetMembershipWaitingPeriodStatusesResponse xmlns:ns1="http://schemas.company.com/bp/membership/getmembershipwaitingperiodstatuses/2015/05" xmlns:ns0="http://schemas.company.com/bp/membership/getmembershipwaitingperiodstatuses/membershipperson/2015/05">
<MembershipPersons>
<MembershipPerson>
<ns0:PersonId>133279</ns0:PersonId>
<ns0:TitleCode>Ms </ns0:TitleCode>
<ns0:GivenName>Elizabeth</ns0:GivenName>
<ns0:MiddleName>Clare Kurth</ns0:MiddleName>
<ns0:Surname>Smith</ns0:Surname>
<mp:WaitingPeriodStatuses xmlns:mp="http://schemas.company.com/bp/membership/getmembershipwaitingperiodstatuses/membershipperson/2015/05">
<mp:WaitingPeriodStatus>
<mp:WaitingPeriodCode>Hear</mp:WaitingPeriodCode>
<mp:WaitingPeriod>24</mp:WaitingPeriod>
<mp:WaitingPeriodUnit>Months</mp:WaitingPeriodUnit>
<mp:WaitingPeriodDescription>Hearing Aids</mp:WaitingPeriodDescription>
<mp:WaitingPeriodStatus>Waiting</mp:WaitingPeriodStatus>
<mp:StartDate>2017-01-05</mp:StartDate>
<mp:EndDate>2019-01-05</mp:EndDate>
</mp:WaitingPeriodStatus>
</mp:WaitingPeriodStatuses>
</MembershipPerson>
<MembershipPerson>
<ns0:PersonId>134259</ns0:PersonId>
<ns0:GivenName>Majed</ns0:GivenName>
<ns0:MiddleName>John</ns0:MiddleName>
<ns0:Surname>Song</ns0:Surname>
<mp:WaitingPeriodStatuses xmlns:mp="http://schemas.company.com/bp/membership/getmembershipwaitingperiodstatuses/membershipperson/2015/05">
<mp:WaitingPeriodStatus>
<mp:WaitingPeriodCode>Laser</mp:WaitingPeriodCode>
<mp:WaitingPeriod>24</mp:WaitingPeriod>
<mp:WaitingPeriodUnit>Months</mp:WaitingPeriodUnit>
<mp:WaitingPeriodDescription>Laser Eye Surgery</mp:WaitingPeriodDescription>
<mp:WaitingPeriodStatus>WaitingTerminated</mp:WaitingPeriodStatus>
<mp:StartDate>2017-01-05</mp:StartDate>
<mp:EndDate>2019-01-05</mp:EndDate>
</mp:WaitingPeriodStatus>
</mp:WaitingPeriodStatuses>
</MembershipPerson>
</MembershipPersons>
</ns1:GetMembershipWaitingPeriodStatusesResponse>
XSLT應用於:
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:var="http://schemas.microsoft.com/BizTalk/2003/var" exclude-result-prefixes="msxsl var s0 s3 s4 s1 s2 s5" version="1.0" xmlns:s0="http://schemas.company.com/es/product/getwebactivewaitingperiods/2015/05" xmlns:ns0="http://schemas.company.com/bp/membership/getmembershipwaitingperiodstatuses/membershipperson/2015/05" xmlns:s4="http://schemas.company.com/cp/membership/waitingperiodunit/2014/06" xmlns:s1="http://schemas.company.com/cp/membership/getmembershipwaitingperiodstatuses/2014/06" xmlns:s2="http://schemas.microsoft.com/BizTalk/2003/aggschema" xmlns:s3="http://schemas.company.com/cp/membership/waitingperiodstatuses/2014/06" xmlns:s5="http://schemas.company.com/cp/membership/waitingperiodstatuscode/2014/06" xmlns:ns1="http://schemas.company.com/bp/membership/getmembershipwaitingperiodstatuses/2015/05">
<xsl:output omit-xml-declaration="yes" method="xml" version="1.0" />
<xsl:template match="/">
<xsl:apply-templates select="/s2:Root" />
</xsl:template>
<xsl:template match="/s2:Root">
<ns1:GetMembershipWaitingPeriodStatusesResponse>
<MembershipPersons>
<xsl:for-each select="InputMessagePart_1/s1:GetMembershipWaitingPeriodStatusesResponse/s3:MembershipPersons/s3:MembershipPerson">
<MembershipPerson>
<ns0:PersonId>
<xsl:value-of select="s3:PersonId/text()" />
</ns0:PersonId>
<xsl:if test="s3:TitleCode">
<ns0:TitleCode>
<xsl:value-of select="s3:TitleCode/text()" />
</ns0:TitleCode>
</xsl:if>
<ns0:GivenName>
<xsl:value-of select="s3:GivenName/text()" />
</ns0:GivenName>
<xsl:if test="s3:MiddleName">
<ns0:MiddleName>
<xsl:value-of select="s3:MiddleName/text()" />
</ns0:MiddleName>
</xsl:if>
<ns0:Surname>
<xsl:value-of select="s3:SurName/text()" />
</ns0:Surname>
<xsl:call-template name="CopyWaitingPeriodStatuses" />
</MembershipPerson>
</xsl:for-each>
</MembershipPersons>
</ns1:GetMembershipWaitingPeriodStatusesResponse>
</xsl:template>
<xsl:template name="CopyWaitingPeriodStatuses" xmlns:mp="http://schemas.company.com/bp/membership/getmembershipwaitingperiodstatuses/membershipperson/2015/05">
<xsl:element name="mp:WaitingPeriodStatuses">
<xsl:for-each select="../../../../InputMessagePart_0/*/*/*">
<xsl:variable name="waitingPeriodCode" select="node()"/>
<xsl:for-each select="../../../../InputMessagePart_1/*/*/*/*/*/*">
<xsl:if test="node()[local-name()='WaitingPeriodCode'] = $waitingPeriodCode and node()[local-name() = 'PersonId'] = node()[local-name()='PersonId']">
<xsl:element name="mp:WaitingPeriodStatus">
<xsl:if test="node()[local-name() = 'WaitingPeriodCode']">
<xsl:element name="mp:WaitingPeriodCode">
<xsl:value-of select="node()[local-name()='WaitingPeriodCode']" />
</xsl:element>
</xsl:if>
<xsl:if test="node()[local-name() = 'WaitingPeriod']">
<xsl:element name="mp:WaitingPeriod">
<xsl:value-of select="node()[local-name()='WaitingPeriod']" />
</xsl:element>
</xsl:if>
<xsl:if test="node()[local-name() = 'WaitingPeriodUnit']">
<xsl:element name="mp:WaitingPeriodUnit">
<xsl:value-of select="node()[local-name()='WaitingPeriodUnit']" />
</xsl:element>
</xsl:if>
<xsl:if test="node()[local-name() = 'WaitingPeriodDescription']">
<xsl:element name="mp:WaitingPeriodDescription">
<xsl:value-of select="node()[local-name()='WaitingPeriodDescription']" />
</xsl:element>
</xsl:if>
<xsl:if test="node()[local-name() = 'Status']">
<xsl:element name="mp:WaitingPeriodStatus">
<xsl:value-of select="node()[local-name()='Status']" />
</xsl:element>
</xsl:if>
<xsl:if test="node()[local-name() = 'StartDate']">
<xsl:element name="mp:StartDate">
<xsl:value-of select="node()[local-name()='StartDate']" />
</xsl:element>
</xsl:if>
<xsl:if test="node()[local-name() = 'EndDate']">
<xsl:element name="mp:EndDate">
<xsl:value-of select="node()[local-name()='EndDate']" />
</xsl:element>
</xsl:if>
<xsl:if test="node()[local-name() = 'WaitingPeriodWaiveDescription']">
<xsl:if test="(normalize-space(node()[local-name() = 'WaitingPeriodWaiveDescription']) != '' and normalize-space(node()[local-name() = 'Status']) != 'ServedNewborn')">
<xsl:element name="mp:WaitingPeriodWaiveDescription">
<xsl:value-of select="node()[local-name() = 'WaitingPeriodWaiveDescription']/text()" />
</xsl:element>
</xsl:if>
</xsl:if>
</xsl:element>
</xsl:if>
</xsl:for-each>
</xsl:for-each>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
加一。如果只有每個人都包括輸入,代碼,預期輸出和實際輸出,就像你所做的一樣。 – LarsH
@PavanMuppidi:由於'ns1:GetMembershipWaitingPeriodStatusesResponse'中的命名空間聲明導致輸入xml格式錯誤,其中關閉的「 - 字符丟失。我無法編輯,也許您可以更正此問題。 –