欺骗XSL以用特定属性为空或空的XML元素解释XML元素



java 8,但我认为这没有任何区别,因为我认为这是一个纯粹的XSL问题。

我有一些代码生成以下XML(例如):

<fizz>
  <account>10016</account>
  <accountId>2000001347</accountId>
  <buzz class="null"/>
</fizz>

运行时buzz元素的值有3种潜在方案:

  • " null类Buzz" -> <buzz class="null"/>;或
  • "非循环类嗡嗡声" -> <buzz class="anythingOtherThanNull"/>;或
  • "普通嗡嗡声" -> <buzz><complicatedXmlStructureInsideOfHere</buzz>

因此,在运行时,我们可能会有" null类嗡嗡声","非零类嗡嗡声"或"正常嗡嗡声"。我不想在" Null类Buzz"。的情况下转换buzz元素(但是I do 想要转换非null类嗡嗡声和正常的嗡嗡声变化。)

这是我的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类嗡嗡声,我希望buzz完全忽略:

<foobar>
  <account>10016</account>
  <logId>2000001347</logId>
</foobar>

有什么想法我该怎么做?预先感谢!

,如注释中所述:

<xsl:if test="buzz[not(@class='null')]">

至少有一个buzz元素将返回true,其中包含字符串"null"

class属性

最新更新