这里是Java 8,但我认为这没有什么区别,因为我相信这是一个纯粹的XSL问题。
我有一些代码可以生成以下XML(例如):
<fizz>
<account>10016</account>
<accountId>2000001347</accountId>
<buzz class="null"/>
</fizz>
运行时buzz
元素的值存在3种潜在情况:
<buzz class="null"/>
;或<buzz class="anythingOtherThanNull"/>
;或<buzz><complicatedXmlStructureInsideOfHere</buzz>
因此,在运行时,我们可能会收到“空类Buzz”,“非空类Buzz”或“普通Buzz”。 在“空类嗡嗡声”的情况下,我不想转换buzz
元素。(但我 do 想要转换非空类嗡嗡声,正常的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>
<xsl:if test="buzz">
<FLIMFLAM SEGMENT="1">
<HAPP>003</HAPP>
<SADD><xsl:value-of select="buzz"/></SADD>
</FLIMFLAM>
</xsl:if>
<foobar>
</xsl:template>
</xsl:stylesheet>
问题在于,这会转换Null类Buzz变体并产生:
<foobar>
<account>10016</account>
<logId>2000001347</logId>
<FLIMFLAM SEGMENT="1">
<HAPP>003</HAPP>
<SADD/>
</FLIMFLAM>
</foobar>
在Null Class Buzz的情况下,我希望buzz
被完全忽略:
<foobar>
<account>10016</account>
<logId>2000001347</logId>
</foobar>
有什么想法可以做到这一点吗?预先感谢!
答案 0 :(得分:1)
如评论中所述:
<xsl:if test="buzz[not(@class='null')]">
当至少有一个{strong>不具有包含字符串buzz
的{{1}}属性的class
元素时,将返回true。