我有一个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>
答案 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])
它将返回true
或false
布尔值。
此输入
<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
中进行检查
答案 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>