IF中的多重“非”条件(XSLT)

时间:2016-04-11 17:44:37

标签: xslt

说明

我有一个要求,我需要检查传入字段的属性和值,如果两者都不是NULL,我会在输出中填充这些值。

问题:

即使传递了其中一个值(属性或实际字段值),我也会得到输出。那不应该是这种情况,因为我需要'和'条件来为输入xml的“两个”工作。

我有两个输入xml:

第一个:

<a>
  <b Ccy="INR">999.000</b>
</a>

第二个:

<v>
  <z Ccy="USD">9999.000</z>
</v>

使用的代码:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
  xmlns:fo="http://www.w3.org/1999/XSL/Format" 
  exclude-result-prefixes="fo">
  <xsl:output encoding="UTF-8" 
              version="1.0" 
              method="xml" 
              indent="yes"/>
  <xsl:template match="/">
    <xsl:variable name="ccy1" 
       select="./*[local-name()='a']
                /*[local-name()='b']
                /@*[local-name()='Ccy']"/>
    <xsl:variable name="field1" 
      select="./*[local-name()='a']
               /*[local-name()='b']"/>
    <xsl:variable name="ccy2" 
      select="./*[local-name()='v']
               /*[local-name()='z']
               /@*[local-name()='Ccy']"/>
    <xsl:variable name="field2" 
      select="./*[local-name()='v']
               /*[local-name()='z']"/>
    <xsl:if test="not($ccy1 = '') 
                  and not($field1 = '') 
                  or not($ccy2 = '') 
                  and not($field2 = '')">
      <output Ccy="AAA">
        <xsl:choose>
          <xsl:when test="$ccy1 and $field1">
            <xsl:attribute name="Ccy">
              <xsl:value-of select="$ccy1"/>
            </xsl:attribute>
            <xsl:value-of select="$field1"/>
          </xsl:when>
          <xsl:when test="$ccy2 and $field2">
            <xsl:attribute name="Ccy">
              <xsl:value-of select="$ccy2"/>
            </xsl:attribute>
            <xsl:value-of select="$field2"/>
          </xsl:when>
        </xsl:choose>
      </output>
    </xsl:if>
 </xsl:template>
</xsl:stylesheet>

1 个答案:

答案 0 :(得分:0)

您的方法的问题是空节点集永远不会等于字符串 - 甚至不是空字符串。因此,在第一个示例中,无论实际输入节点是否为空,表达式g2 <- g1 + geom_text(aes(CPI, HDI, label = Country), data = dat[dat$Country %in% pointsToLabel,]) 的计算结果为not($ccy2 = '') and not($field2 = '')"

尝试改为:

true()