Umbraco продолжает возвращать первый дочерний узел, а не все значения узла ребенка. - PullRequest
1 голос
/ 26 июля 2011

У меня проблема с выбором и отображением подстроки из каждого из дочерних узлов с использованием XSLT. Я использовал следующий код. Я уверен, что мне не хватает чего-то очень простого: просто 4 раза возвращается первый дочерний узел, поскольку 4 дочерних узла. Кто-нибудь может помочь?

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"
  exclude-result-prefixes="msxml umbraco.library Exslt.ExsltCommon Exslt.ExsltDatesAndTimes Exslt.ExsltMath Exslt.ExsltRegularExpressions Exslt.ExsltStrings Exslt.ExsltSets ">


<xsl:output method="xml" omit-xml-declaration="yes"/>

<xsl:param name="currentPage"/>

<xsl:template match="/">

  <xsl:param name="testString">

    <xsl:for-each select="$currentPage/WhatWeDoItems [@isDoc]">
      <xsl:value-of select="whatWeDoItemDescription"/>
    </xsl:for-each>

  </xsl:param>
  <xsl:for-each select="$currentPage/WhatWeDoItems [@isDoc]">


      <p><xsl:value-of select="umbraco.library:TruncateString($testString,170,'...')"/></p>
    </xsl:for-each>

</xsl:template>

</xsl:stylesheet>

Ответы [ 2 ]

1 голос
/ 26 июля 2011

Этот код :

    <xsl:param name="testString">
        <xsl:for-each select="$currentPage/WhatWeDoItems [@isDoc]">
            <xsl:value-of select="whatWeDoItemDescription"/>
        </xsl:for-each>
    </xsl:param>

определяет xsl:param с именем testString, который содержит единственную строку , которая является объединением (четырех) строковые значения каждой (из четырех) whatWeDoItemDescription потомков $currentPage/WhatWeDoItems [@isDoc].

Затем вы выводите четыре раза усеченную подстроку этой конкатенации, и она показывает усечение только первой из четырех конкатенированных строк.

Soluton :

Не следует объединять строки в параметре - просто выберите все нужные элементы:

<xsl:param name="pTestString" select=
            "$currentPage/WhatWeDoItems[@isDoc]/whatWeDoItemDescription"/>

<xsl:for-each select="$pTestString">
  <p><xsl:value-of select=
    "umbraco.library:TruncateString(.,170,'...')"/></p>
</xsl:for-each>         
1 голос
/ 26 июля 2011

Я думаю, что вы можете полностью отказаться от параметра и цикла.

<xsl:for-each select="$currentPage/WhatWeDoItems [@isDoc]">
    <xsl:variable name="description" select="whatWeDoItemDescription"/>
    <p><xsl:value-of select="umbraco.library:TruncateString($description,170,'...')"/></p>
</xsl:for-each>
...