如何解决如何根据 XSLT 中的字段值跳过段
<?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 != '' 时使用新字段名称进行复制和格式化
<?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 举报,一经查实,本站将立刻删除。