如果所有标签都等于value,则XSLT返回布尔值

时间:2019-03-14 07:10:20

标签: xml xslt

我有一个xml:

cnopts.hostkeys = None

我想实现一种逻辑,如果其中一个成功标记等于0,则返回true;如果所有成功标记都等于0,则返回false。

到目前为止,我有,但我不知道如何使xslt重新调校errorFlag = false,如果它们都为= 0:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
    <success>0</success>
    <success>0</success>
    <success>1</success>
</soapenv:Body>

想要的输出-仅一个字段:

<xsl:template match="/">
  <xsl:call-template name="test" />
</xsl:template>

 <xsl:template match="/soapenv:Envelope/soapenv:Body" name ="test">
   <errorFlag>
     <xsl:if test="contains(.,'0')">true</xsl:if>
   </errorFlag>
</xsl:template>

3 个答案:

答案 0 :(得分:1)

怎么样:

<xsl:template match="/">
    <errorFlag>
         <xsl:value-of select="not(/soapenv:Envelope/soapenv:Body/success=1)" />
    </errorFlag>
</xsl:template>

或(需要XSLT 2.0):

<xsl:template match="/">
    <errorFlag>
        <xsl:value-of select="every $item in /soapenv:Envelope/soapenv:Body/success satisfies $item=0"/>
    </errorFlag>
</xsl:template>

答案 1 :(得分:1)

  

我想实现一种逻辑,如果成功之一,该逻辑将返回true   标签等于0,如果所有标签都等于0,则返回false。

首先,让我们创建真值表:

All zeros | None zero | Some zero, others not
-------------------------------------------
  False   |   False   |        True

第二,XPath中的node-set comparison存在。所以:

boolean(/soapenv:Envelope/soapenv:Body[success = 0 and success != 0])

它将返回truefalse布尔值。

此输入

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
    <success>0</success>
    <success>0</success>
    <success>1</success>
</soapenv:Body>
</soapenv:Envelope>

使用此样式表

<xsl:stylesheet 
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" version="1.0">
   <xsl:template match="/">
      <xsl:value-of 
         select="boolean(
                    /soapenv:Envelope
                       /soapenv:Body[
                          success = 0 and success != 0
                       ]
                 )"/>
   </xsl:template>
</xsl:stylesheet>

返回

true

http://www.utilities-online.info/xsltransformation/?save=ceed7a50-6a47-4c2c-b344-86ad3b3b0d92-xsltransformation

中进行检查

答案 2 :(得分:0)

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" version="1.0">
<xsl:output method="xml" indent="yes" />
<xsl:strip-space elements="*" />

<xsl:key name="succKey" match="success" use="." />

<xsl:template match="/">
    <xsl:call-template name="test" />
</xsl:template>

<xsl:template match="/soapenv:Envelope/soapenv:Body" name="test">
    <xsl:variable name="key-count"
        select="count(//success[generate-id() =
                               generate-id(key('succKey', .))])" />
    <errorFlag>
        <xsl:choose>
            <xsl:when test="$key-count = 1">
                <xsl:text>true</xsl:text>
            </xsl:when>
            <xsl:otherwise>
                <xsl:text>false</xsl:text>
            </xsl:otherwise>
        </xsl:choose>
    </errorFlag>
</xsl:template>
</xsl:stylesheet>

http://xsltfiddle.liberty-development.net/6r5Gh33