如何解决应将具有 EventType != 'HardBounce' 的输入 XML 复制到输出
<?xml version="1.0" encoding="UTF-8"?>
<root>
<Interaction>
<RecipientId>666994250005</RecipientId>
<RecipientType>normal</RecipientType>
<MailingId>18744460</MailingId>
<ReportId>2121196700</ReportId>
<CampaignId/>
<Email>ilovepizza@mntest.net</Email>
<EventType>HardBounce</EventType>
<EventTimestamp>05/11/202113:46:40</EventTimestamp>
<BodyType/>
<ContentId/>
<ClickName/>
<URL/>
<ConversionAction/>
<ConversionDetail/>
<ConversionAmount/>
<SuppressionReason/>
<MailingName>YourNovemberTrend-TESTING_682-BOUNCES</MailingName>
<MailingSubject>YourNovemberTrend-TESTING_682-BOUNCES</MailingSubject>
<CONTACT_MC_ID>42010A0351251EEBA0EF17B38C3EDC78</CONTACT_MC_ID>
<CAMPAIGN_ID>0000000682</CAMPAIGN_ID>
<SOURCE_OBJECT_ID>C01AFE8349D7F713787E25B656A3D2D6BA205205</SOURCE_OBJECT_ID>
<UUID>ca69251e-8b0e-1d90-1700-1c42c1610f6d</UUID>
</Interaction>
<Interaction>
<RecipientId>672386985145</RecipientId>
<RecipientType>normal</RecipientType>
<MailingId>18848768</MailingId>
<ReportId>2141674081</ReportId>
<CampaignId/>
<Email>cg@gmail.com</Email>
<EventType>Sent</EventType>
<EventTimestamp>06/08/202119:28:06</EventTimestamp>
<BodyType/>
<ContentId/>
<ClickName/>
<URL/>
<ConversionAction/>
<ConversionDetail/>
<ConversionAmount/>
<SuppressionReason/>
<MailingName>TrendEmailTestSend425(18)</MailingName>
<MailingSubject>TESTING:YourNovemberTrend-710Campaign</MailingSubject>
<CONTACT_MC_ID>42010A0351251EDBA6904634DF983CB0</CONTACT_MC_ID>
<CAMPAIGN_ID>0000000710</CAMPAIGN_ID>
<SOURCE_OBJECT_ID>42948F6B87172477E4BE993B3EC48255EF4A27D4</SOURCE_OBJECT_ID>
<UUID>1292721e-8b0e-1d90-1700-1c42c1610f6d</UUID>
</Interaction>
</root>
我正在尝试低于 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:template match="/root/Interaction">
<xsl:if test="/root/Interaction/EventType/text() != 'HardBounce'">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
预期输出为:
<root>
<Interaction>
<RecipientId>672386985145</RecipientId>
<RecipientType>normal</RecipientType>
<MailingId>18848768</MailingId>
<ReportId>2141674081</ReportId>
<CampaignId/>
<Email>cg@gmail.com</Email>
<EventType>Sent</EventType>
<EventTimestamp>06/08/202119:28:06</EventTimestamp>
<BodyType/>
<ContentId/>
<ClickName/>
<URL/>
<ConversionAction/>
<ConversionDetail/>
<ConversionAmount/>
<SuppressionReason/>
<MailingName>TrendEmailTestSend425(18)</MailingName>
<MailingSubject>TESTING:YourNovemberTrend-710Campaign</MailingSubject>
<CONTACT_MC_ID>42010A0351251EDBA6904634DF983CB0</CONTACT_MC_ID>
<CAMPAIGN_ID>0000000710</CAMPAIGN_ID>
<SOURCE_OBJECT_ID>42948F6B87172477E4BE993B3EC48255EF4A27D4</SOURCE_OBJECT_ID>
<UUID>1292721e-8b0e-1d90-1700-1c42c1610f6d</UUID>
</Interaction>
</root>
只是在 XSLT 中沾沾自喜。感谢帮助。 满足条件的节点应该被复制到目标。
请勿阅读以下内容。这只是为了让堆栈结束 StackoverStackoverflow 要求我提出更多细节问题,但我认为我已经提供了足够的细节来理解问题。
解决方法
指令:
<xsl:template match="/root/Interaction">
将您置于 Interaction
的上下文中。从这个上下文来看,EventType
的测试需要使用到 EventType
的相对路径,它是当前 Interaction
的孩子 - 例如
<xsl:if test="EventType != 'HardBounce'">
你所拥有的从根开始,测试整个 XML 文档中是否至少有一个 EventType
满足条件。这当然适用于所有 Interaction
正在测试的元素。
请注意,您可以通过以下方式更简单地完成相同的事情:
<xsl:stylesheet version="3.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/root">
<xsl:copy>
<xsl:copy-of select="Interaction[EventType != 'HardBounce']"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
,
使用空模板 background fetch
阻止您不想复制的元素。如果您使用的是 XSLT 3,则通过您的第一个模板处理其余部分,甚至通过声明 <xsl:template match="Interaction[EventType = 'HardBounce']"/>
来替换它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。