如何让XSL将class为null的buzz元素视为空并忽略转换?
解决方案:调整XSL条件判断,排除Null Class Buzz场景
你的问题核心是当前XSL的判断逻辑会匹配所有存在的buzz元素,包括带class="null"的情况。只需要修改<xsl:if>的判断条件,把这类不需要处理的buzz排除即可。
核心修改点
把原来的判断条件:
<xsl:if test="buzz">
替换为:
<xsl:if test="buzz[not(@class='null')]">
这个条件会精准匹配你需要处理的两种场景:
buzz元素没有class属性(Normal Buzz场景)buzz元素的class属性值不等于null(Non-Null Class Buzz场景)
完整的XSL代码
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:strip-space elements="*"/> <xsl:template match="/fizz"> <foobar> <xsl:copy-of select="account"/> <logId><xsl:value-of select="accountId"/></logId> <!-- 调整后的判断逻辑:排除class为null的buzz --> <xsl:if test="buzz[not(@class='null')]"> <FLIMFLAM SEGMENT="1"> <HAPP>003</HAPP> <SADD><xsl:value-of select="buzz"/></SADD> </FLIMFLAM> </xsl:if> </foobar> </xsl:template> </xsl:stylesheet>
场景验证
- Null Class Buzz:
<buzz class="null"/>→ 条件不满足,不会生成FLIMFLAM块,输出完全符合你的期望。 - Non-Null Class Buzz:
<buzz class="anythingOtherThanNull"/>→ 条件满足,正常生成对应结构。 - Normal Buzz:
<buzz><complicatedXmlStructureInsideOfHere></buzz>→ 条件满足,正确提取内容到SADD节点中。
内容的提问来源于stack exchange,提问作者hotmeatballsoup
相关产品推荐
相关产品推荐

