XSLT检查中的节点可用性



我在项目中使用XSLT1.0。在XSLT转换中,我必须检查特定的元素,如果存在,我必须执行一些串联或其他串联操作。

然而,我在这里找不到一个选项,比如一些内置功能。

要求类似

<Root>
  <a></a>
  <b></b>
  <c></c>
</Root>

这里是元素<a>,进入请求有效载荷,然后我们需要执行<b><c>的级联,或者<c><b>

您可以通过模板匹配来实现这一点:

<xsl:template match="Root[not(a)]">
  <xsl:value-of select="concat(c, b)"/>
</xsl:template>
<xsl:template match="Root[a]">
  <xsl:value-of select="concat(b, c)"/>
</xsl:template>

请按照以下步骤进行尝试:

<xsl:template match="/Root">
    <xsl:choose>
        <xsl:when test="a">
            <!-- do something -->
        </xsl:when>
        <xsl:otherwise>
            <!-- do something else -->
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>

解释:测试返回表达式a所选节点集的布尔值。如果节点集不为空,则结果为true。

使用xsl:choose 测试元素的存在

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"   
    version="1.0">
    <xsl:template match="/Root"> 
        <xsl:choose>
            <xsl:when test="a">
                <xsl:value-of select="concat(c, b)"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="concat(b, c)"/>
            </xsl:otherwise>
        </xsl:choose>  
    </xsl:template>
</xsl:stylesheet>

或者在模板匹配的谓词中:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"   
    version="1.0">
    <xsl:template match="/Root[a]"> 
         <xsl:value-of select="concat(c, b)"/> 
    </xsl:template>
    <xsl:template match="/Root[not(a)]"> 
         <xsl:value-of select="concat(b, c)"/>
    </xsl:template>
</xsl:stylesheet>

在您的情况下,使用choose并在相应的xpath上使用boolean()测试a的存在。

<xsl:template match="Root">
  <xsl:choose>
    <xsl:when test="boolean(./a)">
      <xsl:value-of select="concat(./b, ./c)" />
    </xsl:when>
    <xsl:otherwise>
      <xsl:value-of select="concat(./c, ./b)" />
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

相关内容

  • 没有找到相关文章

最新更新