XML / XSL if else子字符串

问题描述

如果条目太长,我想用if子句在 XML / XSL 中对变量进行子字符串化。

我尝试过类似的方法,但是它不能那样工作。

                    <xsl:variable id="newId" select="./newId"/>
                    <xsl:template match="newId">
                        <xsl:choose>
                            <xsl:when test="string-length() &lt; 15">
                                <xsl:value-of select="newId"/>  
                            </xsl:when>
                            <xsl:otherwise>
                                 <xsl:value-of select="substring(.,1,15)" />
                                 <br>
                                 <xsl:value-of select="substring(.,16)" />
                                 </br>
                            </xsl:otherwise>
                        </xsl:choose>

解决方法

需要在代码中进行一些更改。

  • xsl:variable具有“名称”属性,而不是“ id”
  • 字符串长度函数需要一个参数

这是我要怎么做:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">

  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="/">
       <xsl:variable name="newId" select="'SomeText123456789'"/>
        <xsl:choose>
            <xsl:when test="string-length($newId) &lt; 15">
                <xsl:value-of select="$newId"/>  
            </xsl:when>
            <xsl:otherwise>
                 <xsl:value-of select="substring($newId,1,15)" />
                 <br>
                 <xsl:value-of select="substring($newId,16)" />
                 </br>
            </xsl:otherwise>
        </xsl:choose>
  </xsl:template>
  
</xsl:stylesheet>

看到它在这里工作:https://xsltfiddle.liberty-development.net/jxDjind

,

我看不到您的模板有什么特别的错误,除了:

<xsl:value-of select="newId"/>  

需要是:

<xsl:value-of select="."/>  

因为您已经在newId的上下文中。

不知道为什么不使用变量,或者根本不需要变量。如果由于某种原因确实需要它,则正确定义它;您现在拥有的将产生错误。