XSLT:string-length($ variable)给出了错误的答案

时间:2015-11-17 14:12:31

标签: xml xslt

我有一个xsl变量,如下所示:

<xsl:variable name="all" >
    abab
</xsl:variable>

现在我想计算上面变量(all)的长度,所以我尝试这样做:

<xsl:value-of select="string-length($all)"/>

我希望4是我的答案(字符串中的4个字符&#39; abab&#39;)但我得到39。

我在这里做错了什么?

2 个答案:

答案 0 :(得分:5)

使用<xsl:variable name="all" select="'abab'"/><xsl:variable name="all">abab</xsl:variable>,如果在字母前后插入空格,那么它们当然是文本节点内容的一部分,也是字符串长度的一部分计算

答案 1 :(得分:3)

定义不带空白字符的变量,或使用:

DELIMITER //

CREATE PROCEDURE `uspCreateViewFromTable`(
  IN ViewName varchar(255),
  IN TableName varchar(255)
)
BEGIN
  /*
  #View Droppen falls sie schon erstellt wurde
  SET @s = CONCAT('DROP VIEW IF EXISTS ',ViewName);
  PREPARE stmt FROM @s;
  EXECUTE stmt;
  DEALLOCATE PREPARE stmt;
  */

  # Verwendete Spalten filtern und Statement bauen
  #SET @columns = CAST('SELECT ' AS VARCHAR(10));

  -- DECLARE column varchar(500);
  DECLARE `column` varchar(500);
  DECLARE done BOOL DEFAULT FALSE;

  /*
  DECLARE column_cursor FOR
  SELECT column_name
  FROM INFORMATION_SCHEMA.COLUMNS
  WHERE table_name = Tablename;
  */
  DECLARE column_cursor CURSOR FOR
  SELECT column_name
  FROM INFORMATION_SCHEMA.COLUMNS
  WHERE table_name = Tablename;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

  #View Droppen falls sie schon erstellt wurde
  SET @s = CONCAT('DROP VIEW IF EXISTS ',ViewName);
  PREPARE stmt FROM @s;
  EXECUTE stmt;
  DEALLOCATE PREPARE stmt;

  -- OPEN column_cursor
  OPEN column_cursor;

  read_loop: LOOP
      -- FETCH column_cursor INTO column
      FETCH column_cursor INTO `column`;
      # do something
      -- SELECT column;
      SELECT `column`;
      IF done THEN
        LEAVE read_loop;
      END IF;
  END LOOP;
  CLOSE column_cursor;
END//

DELIMITER ;