ВОПРОС XSL: альтернативный метод подсчета количества строк или символов новой строки атрибута xml - PullRequest
1 голос
/ 30 июля 2010

Я искал в интернете, чтобы обнаружить этот метод определения количества строк в элементе xml .:

<xsl:if test="string-length(@Example) - string-length(translate(@Example, '&#xa;', '')) &lt; 10"> 

В приведенном выше примере @Example - это элемент, для которого подсчитывается количество строк. Однако мне не понравился этот код, потому что он автоматически превращается в такой:

    <xsl:if test="string-length(@Example) - string-length(translate(@Example, ' 
', '')) &lt; 10">

Видите ли, код &#xa; превращается в буквальную пустую строку (которую он представляет, но я не хочу, чтобы она была пустой строкой). Это выше кажется мне плохим стилем кодирования (если это не так, пожалуйста, скажите мне), поэтому я хочу найти альтернативный способ определения количества строк в @Example. Спасибо.

Ответы [ 2 ]

0 голосов
/ 01 августа 2010

Только для уточнения моего предыдущего ответа (https://stackoverflow.com/questions/3366181/sharepoint-designer-keeps-turning-xa-within-source-code-into-literal-new-line)

Запуск этой таблицы стилей (такой же, как у Dimitre):

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>

 <xsl:variable name="vNL" select="'&#xA;'"/>

 <xsl:template match="xsl:value-of">
  <xsl:value-of select=
    "string-length(@select)
    -
     string-length(translate(@select, $vNL, ''))"/>
 </xsl:template>
</xsl:stylesheet>

С самим собой в качестве входа, выхода:

0

Работает только с таким вводом:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>

 <xsl:variable name="vNL" select="'&#xA;'"/>

 <xsl:template match="xsl:value-of">
  <xsl:value-of select=
    "string-length(@select)&#xA;
    -&#xA;
     string-length(translate(@select, $vNL, ''))"/>
 </xsl:template>
</xsl:stylesheet>

Выход:

2
0 голосов
/ 31 июля 2010

Этот стиль, вероятно, ближе к вашим предпочтениям :

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:variable name="vNL" select="'&#xA;'"/>

 <xsl:template match="t">
  <xsl:value-of select=
    "string-length(@Example)
    -
     string-length(translate(@Example, $vNL, ''))"/>
 </xsl:template>
</xsl:stylesheet>

Константа NL хранится в переменной , и ссылка на эту переменную не вызывает редакторадля отображения новой строки.

Даже объявление $vNL может быть излечено от этой проблемы - при условии, что оно превращено в глобальный <xsl:param>, а значение предоставляется внешнимПризыватель трансформации.

...