微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何根据 XSLT 中的字段值跳过段

如何解决如何根据 XSLT 中的字段值跳过段

我有一个 XML 输入,我必须将其映射到目标结构中

这是 fiddler 的链接LINK

<?xml version='1.0' encoding='UTF-8'?>
<root>
    <d>
        <Campaign>
            <CampaignId>0000000112</CampaignId>
            <Name>Connected Water DMI Fail Test</Name>
            <MarketingAreaId>CXXGLOBAL</MarketingAreaId>
            <SegmentationObject>SAP_CONTACT_ENGAGEMENT_SIN</SegmentationObject>
            <ImplementationId>ZOC_EXPORT_ACOUSTIC</ImplementationId>
        </Campaign>
        <PackageId>47</PackageId>
        <ExecutionStartDateTime>2021-06-30T15:28:49Z</ExecutionStartDateTime>
        <ExecutionRunKey>42010A0350331EDBB6B6EDEF969FD623</ExecutionRunKey>
        <CampaignTargetGroupMembers>
            <OutboundId>A071C1B1F437B581DC597E5116B38bed039CA864</OutboundId>
            <PackageId>47</PackageId>
            <ExecutionRunKey>42010A0350331EDBB6B6EDEF969FD623</ExecutionRunKey>
            <TargetGroupMemberAttributeData>
                <AttributeId>DA-_SAP_CF_CE_CONTACT_IA_ERP_CUST-SMTP_ADDR</AttributeId>
                <Value></Value>
                <EdmTypeId>Edm.String</EdmTypeId>
                <OutboundId>A071C1B1F437B581DC597E5116B38bed039CA864</OutboundId>
            </TargetGroupMemberAttributeData>
            <TargetGroupMemberAttributeData>
                <AttributeId>DA-_SAP_CF_CE_CONTACT_IA_ERP_CUST-NAME_LAST</AttributeId>
                <Value>Bailey</Value>
                <EdmTypeId>Edm.String</EdmTypeId>
                <OutboundId>A071C1B1F437B581DC597E5116B38bed039CA864</OutboundId>
            </TargetGroupMemberAttributeData>
            <TargetGroupMemberAttributeData>
                <AttributeId>DA-_SAP_CF_CE_CONTACT_IA_ERP_CUST-NAME_FirsT</AttributeId>
                <Value>Chandler</Value>
                <EdmTypeId>Edm.String</EdmTypeId>
                <OutboundId>A071C1B1F437B581DC597E5116B38bed039CA864</OutboundId>
            </TargetGroupMemberAttributeData>
        </CampaignTargetGroupMembers>
        <CampaignTargetGroupMembers>
            <OutboundId>E6713D258EAC1ADACE6AC905BB3ECF5E1CEF4776</OutboundId>
            <PackageId>47</PackageId>
            <ExecutionRunKey>42010A0350331EDBB6B6EDEF969FD623</ExecutionRunKey>
            <TargetGroupMemberAttributeData>
                <AttributeId>DA-_SAP_CF_CE_CONTACT_IA_ERP_CUST-SMTP_ADDR</AttributeId>
                <Value>rcgrymm@gmail.com</Value>
                <EdmTypeId>Edm.String</EdmTypeId>
                <OutboundId>E6713D258EAC1ADACE6AC905BB3ECF5E1CEF4776</OutboundId>
            </TargetGroupMemberAttributeData>
            <TargetGroupMemberAttributeData>
                <AttributeId>DA-_SAP_CF_CE_CONTACT_IA_ERP_CUST-NAME_LAST</AttributeId>
                <Value>Carmona</Value>
                <EdmTypeId>Edm.String</EdmTypeId>
                <OutboundId>E6713D258EAC1ADACE6AC905BB3ECF5E1CEF4776</OutboundId>
            </TargetGroupMemberAttributeData>
            <TargetGroupMemberAttributeData>
                <AttributeId>DA-_SAP_CF_CE_CONTACT_IA_ERP_CUST-NAME_FirsT</AttributeId>
                <Value>Ruben</Value>
                <EdmTypeId>Edm.String</EdmTypeId>
                <OutboundId>E6713D258EAC1ADACE6AC905BB3ECF5E1CEF4776</OutboundId>
            </TargetGroupMemberAttributeData>                           
        </CampaignTargetGroupMembers>
    </d>
</root>

我必须编写 XSLT 代码,以便节点和子节点仅在 AttributeId = DA-_SAP_CF_CE_CONTACT_IA_ERP_CUST-SMTP_ADDR 和相应的 Value != '' 时使用新字段名称进行复制和格式化

我如何修改 XSLT 代码

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

      <xsl:template match="node()|@*">
        <xsl:copy>
          <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
      </xsl:template>
        <xsl:variable name="campaign" select="root/d/Campaign/CampaignId/text()" />
        <xsl:template match="TargetGroupMemberAttributeData[AttributeId='DA-_SAP_CF_CE_CONTACT_IA_ERP_CUST-NAME_FirsT']">
            <FirsT_NAME><xsl:value-of select="Value"/></FirsT_NAME>
       </xsl:template>  
       <xsl:template match="TargetGroupMemberAttributeData[AttributeId='DA-_SAP_CF_CE_CONTACT_IA_ERP_CUST-NAME_LAST']">
            <LAST_NAME><xsl:value-of select="Value" /></LAST_NAME>
     <xsl:template match="CampaignTargetGroupMembers/ExecutionRunKey">
            <CAMPAIGN_ID><xsl:copy-of select="$campaign"/></CAMPAIGN_ID>
       </xsl:template> 
       <xsl:template match="TargetGroupMemberAttributeData[AttributeId='OUTBOUND_INteraCTION']">
            <UUID><xsl:value-of select="Value" /></UUID>
       </xsl:template> 
    </xsl:stylesheet>

The output Should be:

<?xml version="1.0" encoding="UTF-8"?><root>
    <d>
        <Campaign>
            <CampaignId>0000000112</CampaignId>
            <Name>Connected Water DMI Fail Test</Name>
            <MarketingAreaId>CXXGLOBAL</MarketingAreaId>
            <SegmentationObject>SAP_CONTACT_ENGAGEMENT_SIN</SegmentationObject>
            <ImplementationId>ZOC_EXPORT_ACOUSTIC</ImplementationId>
        </Campaign>
        <PackageId>47</PackageId>
        <ExecutionStartDateTime>2021-06-30T15:28:49Z</ExecutionStartDateTime>
        <ExecutionRunKey>42010A0350331EDBB6B6EDEF969FD623</ExecutionRunKey>
        <CampaignTargetGroupMembers>
            <OutboundId>E6713D258EAC1ADACE6AC905BB3ECF5E1CEF4776</OutboundId>
            <PackageId>47</PackageId>
            <CAMPAIGN_ID>0000000112</CAMPAIGN_ID>
            <Email>rcgrymm@gmail.com</Email>
            <LAST_NAME>Carmona</LAST_NAME>
            <FirsT_NAME>Ruben</FirsT_NAME>
            <TargetGroupMemberAttributeData>
                <AttributeId>DA-_SAP_CF_CE_CONTACT_IA_ERP_CUST-INITIATIVE_ID</AttributeId>
                <Value>0000000105,0000000092,0000000041,0000000054,0000000076</Value>
                <EdmTypeId>Edm.String</EdmTypeId>
                <OutboundId>E6713D258EAC1ADACE6AC905BB3ECF5E1CEF4776</OutboundId>
            </TargetGroupMemberAttributeData>           
        </CampaignTargetGroupMembers>
    </d>
</root>

解决方法

要获得所需的输出,您可以使用以下样式表。但并非所有值都可以从您的源中获得,因此我输入了一些静态值。我想你可以填写其余的。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:variable name="campaign" select="root/d/Campaign/CampaignId/text()" />
    <xsl:mode on-no-match="shallow-copy" />
    <xsl:strip-space elements="*" />

    <xsl:template match="CampaignTargetGroupMembers | TargetGroupMemberAttributeData" />

    <xsl:template match="CampaignTargetGroupMembers[TargetGroupMemberAttributeData[AttributeId='DA-_SAP_CF_CE_CONTACT_IA_ERP_CUST-SMTP_ADDR' and Value!='']]">
      <xsl:copy>
          <xsl:apply-templates select="@* | OutboundId | PackageId"/>
          <CAMPAIGN_ID><xsl:value-of select="$campaign" /></CAMPAIGN_ID>
          <Email><xsl:value-of select="TargetGroupMemberAttributeData[AttributeId='DA-_SAP_CF_CE_CONTACT_IA_ERP_CUST-SMTP_ADDR']/Value" /></Email>
          <LAST_NAME><xsl:value-of select="TargetGroupMemberAttributeData[AttributeId='DA-_SAP_CF_CE_CONTACT_IA_ERP_CUST-NAME_LAST']/Value" /></LAST_NAME>
          <FIRST_NAME><xsl:value-of select="TargetGroupMemberAttributeData[AttributeId='DA-_SAP_CF_CE_CONTACT_IA_ERP_CUST-NAME_FIRST']/Value"/></FIRST_NAME>
          <TargetGroupMemberAttributeData>
            <AttributeId>DA-_SAP_CF_CE_CONTACT_IA_ERP_CUST-INITIATIVE_ID</AttributeId>
            <Value>0000000105,0000000092,0000000041,0000000054,0000000076</Value>
            <EdmTypeId><xsl:value-of select="TargetGroupMemberAttributeData[1]/EdmTypeId" /></EdmTypeId>
            <OutboundId><xsl:value-of select="TargetGroupMemberAttributeData[1]/OutboundId" /></OutboundId>
          </TargetGroupMemberAttributeData> 
      </xsl:copy>
    </xsl:template>    
       
</xsl:stylesheet>

它的输出是:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <d>
        <Campaign>
            <CampaignId>0000000112</CampaignId>
            <Name>Connected Water DMI Fail Test</Name>
            <MarketingAreaId>CXXGLOBAL</MarketingAreaId>
            <SegmentationObject>SAP_CONTACT_ENGAGEMENT_SIN</SegmentationObject>
            <ImplementationId>ZOC_EXPORT_ACOUSTIC</ImplementationId>
        </Campaign>
        <PackageId>47</PackageId>
        <ExecutionStartDateTime>2021-06-30T15:28:49Z</ExecutionStartDateTime>
        <ExecutionRunKey>42010A0350331EDBB6B6EDEF969FD623</ExecutionRunKey>
        <CampaignTargetGroupMembers>
            <OutboundId>E6713D258EAC1ADACE6AC905BB3ECF5E1CEF4776</OutboundId>
            <PackageId>47</PackageId>
            <CAMPAIGN_ID>0000000112</CAMPAIGN_ID>
            <Email>rcgrymm@gmail.com</Email>
            <LAST_NAME>Carmona</LAST_NAME>
            <FIRST_NAME>Ruben</FIRST_NAME>
            <TargetGroupMemberAttributeData>
                <AttributeId>DA-_SAP_CF_CE_CONTACT_IA_ERP_CUST-INITIATIVE_ID</AttributeId>
                <Value>0000000105,0000000076</Value>
                <EdmTypeId>Edm.String</EdmTypeId>
                <OutboundId>E6713D258EAC1ADACE6AC905BB3ECF5E1CEF4776</OutboundId>
            </TargetGroupMemberAttributeData>
        </CampaignTargetGroupMembers>
    </d>
</root>

符合要求(带有一些无法从输入 XML 中推导出的静态值)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。