Вставка Test в файл xslt, чтобы убедиться, что никакие значения не являются пустыми - PullRequest
1 голос
/ 25 мая 2011

У меня есть следующий XSLT-файл

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp "&#x00A0;"> ]>
<xsl:stylesheet
  version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:msxml="urn:schemas-microsoft-com:xslt"
  xmlns:umbraco.library="urn:umbraco.library" xmlns:Exslt.ExsltCommon="urn:Exslt.ExsltCommon" xmlns:Exslt.ExsltDatesAndTimes="urn:Exslt.ExsltDatesAndTimes" xmlns:Exslt.ExsltMath="urn:Exslt.ExsltMath" xmlns:Exslt.ExsltRegularExpressions="urn:Exslt.ExsltRegularExpressions" xmlns:Exslt.ExsltStrings="urn:Exslt.ExsltStrings" xmlns:Exslt.ExsltSets="urn:Exslt.ExsltSets" xmlns:tagsLib="urn:tagsLib" xmlns:BlogLibrary="urn:BlogLibrary" xmlns:UCommentLibrary="urn:UCommentLibrary" xmlns:uForum="urn:uForum" xmlns:uForum.raw="urn:uForum.raw"
  exclude-result-prefixes="msxml umbraco.library Exslt.ExsltCommon Exslt.ExsltDatesAndTimes Exslt.ExsltMath Exslt.ExsltRegularExpressions Exslt.ExsltStrings Exslt.ExsltSets tagsLib BlogLibrary UCommentLibrary uForum uForum.raw ">
  <xsl:output method="xml" omit-xml-declaration="yes"/>
  <xsl:param name="currentPage"/>
    <xsl:variable name="blognode" select="umbraco.library:GetXmlNodeById(1187)" />
    <xsl:variable name="today" select="umbraco.library:CurrentDate()" />
    <xsl:variable name="later" select="umbraco.library:DateAdd($today, 'd', -3)" />
    <xsl:variable name="count" select="4" />


  <xsl:template match="/">
    <div id="slider" class="news_banner" >
      <xsl:for-each select="$blognode/ancestor-or-self::*//BlogPost [@isDoc and umbraco.library:DateGreaterThanOrEqual(PostDate, $later) ]">
        <xsl:sort select="pageViewCount" data-type="number" order="descending" />
        <xsl:if test="blogImage != ''">
          <xsl:variable name="crop" select="umbraco.library:GetMedia(blogImage, 0)/crops/crops/crop [@name='NewsBanner']" />
          <xsl:if test="$crop/@url != '' and position() &lt;= $count" >
            <a href="{umbraco.library:NiceUrl(@id)}"><img src="{$crop/@url}" alt="{@nodeName}" title="#htmlcaption{@id}"  /></a>
          </xsl:if>
        </xsl:if>
      </xsl:for-each>
    </div>
    <xsl:for-each select="$blognode/ancestor-or-self::*//BlogPost [@isDoc and umbraco.library:DateGreaterThanOrEqual(PostDate, $later) ]">
      <xsl:sort select="pageViewCount" data-type="number" order="descending" />
      <xsl:if test="blogImage != ''" >
        <xsl:variable name="crop" select="umbraco.library:GetMedia(blogImage, 0)/crops/crops/crop [@name='NewsBanner']" />
        <xsl:if test="$crop/@url != '' and position() &lt;= $count">
          <div id="htmlcaption{@id}" class="nivo-html-caption"><xsl:value-of select="@nodeName" /> - <a href="{umbraco.library:NiceUrl(@id)}">Full Story...</a></div>
        </xsl:if>
      </xsl:if>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

Как вставить сюда тесты, чтобы убедиться, что записи не пустые.

1 Ответ

2 голосов
/ 25 мая 2011

Как я могу вставить тесты здесь, чтобы убедитесь, что записи не пустые

Зависит от того, что подразумевается под "пробелом".

Вот общий способ определения , если значение определенного выражения (здесь для удобства обозначено $var) не состоит только из пробела:

string-length(normalize-space($var)) > 0

Это можно сделать более общим и гибким , если записать как эквивалент:

string-length(translate($var, ' &#xA;&#xC;&#9;')) > 0

Вышеприведенное можно использовать для проверки того, что $var не является пустым, если мы по-разному понимаем, что означает "пустое" . Например:

string-length(translate($var, ' &#xA;&#xC;&#9;&#xA0;')) > 0

проверяет, содержит ли $var какие-либо другие символы, кроме символов пробела (пробел, возврат каретки и табуляции новой строки) и "неразрывный символ пробела" (&#xAO;)

...