2013-05-07 7 views
1

у меня есть значение Выходец из SharePoint в качестве <xsl:value-of select="@fldNm" />Дисплей 1 Условно 2 char.s на основе XSL: стоимость из

Это будет иметь 1 из 2 возможных значений: пустая строка, или «да». Это находится в пределах <xsl:template name="dvt_1.rowedit"> формы отображения SharePoint.

Если значение является пустой строкой, я хочу dislpay один символ, но если это «да», я хочу отобразить другой символ.

Я помещаю тег встроенный с HTML и используя document.write(). Но мне не повезло, что действия реагируют на значение fldNm.

Я нашел много примеров, но они настолько отличаются от того, что я пытаюсь сделать, что я не могу понять их.

Это ситуация:

При создании пользовательского списка SharePoint, 3 .aspx страницы создаются для вас: NEWFORM, editForm и dispForm.

Эти .aspx-страницы загружаются со всеми функциями xsl и xslt. Создано несколько шаблонов xsl, один из которых содержит HTML-код, который будет отображаться при использовании .aspx. Этот шаблон называется SharePoint как 'dvt_1.' Затем этот шаблон вызывается в структуре xsl <xsl:for-each select="$Rows">.

В рамках этого называемого шаблона на странице dispForm, каждый элемент данных показан посредством использования

<td> 
     <div> 
      <xsl:value-of select="@fieldName" /> 
     </div> 
    </td> 

Когда страница отображается, что «стоимость из» тега заменяется содержимым из какой бы области было (конечно).

В моем случае из-за документа Требования к дизайну поле, о котором я спрашиваю, будет содержать «да» или «».

Если да, я хочу использовать один символ, обозначающий «да». В противном случае я хочу поставить там различный символ, что означает «не да».

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

Я пытался что-то вроде

<td> 
    The answer is: <script> if (<xsl:value-of select="@fieldName" /> == 'yes') { 
    document.write('A'); 
    } else { 
    document.write('B'); 
    } 
    </script> 
    </td> 

но XSL тег не был признан в качестве такового.

Я очень новичок в xsl, и хотя я начинаю видеть, как синтаксис выполняет вещи, он по-прежнему очень таинственный для меня.

+1

Это не достаточно контекста, чтобы понять проблему, и на самом деле не имеет смысла. Значения не «происходят из SharePoint» как теги XSL, они (возможно) в XML-документе, который вы трансформируете с помощью XSL. Покажите соответствующие части документа XML и соответствующую таблицу стилей XSL. –

+0

Переходя к основному вопросу ... –

ответ

1

Поскольку вы не предоставили нам много информации, это лучший ответ, который я могу дать.

Как показано в this answer:

Более общий XPath-1.0 выражение, которое производит строку $ s1, если $ Допустимы «х» и производит строку $ s2, если $ Допустимы «у»:

concat(substring($s1, 1 div ($val = "x")), 
     substring($s2, 1 div ($val = "y")) 
    ) 

Если я правильно понимаю ваш вопрос, этот принцип может быть используется для генерации ожидаемого ответа. Чтобы убедиться в этом, посмотрите на следующий пример:

Предположения:

  • Значение "yes" должен выводить символ "a"
  • Значение "" должен выводить символ "b"

Когда этот XSLT (который использует вышеупомянутый XPath):

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output omit-xml-declaration="yes" indent="yes" method="text"/> 
    <xsl:strip-space elements="*"/> 

    <xsl:template match="e"> 
    <xsl:text>The value is: </xsl:text> 
    <xsl:value-of 
     select="concat(substring('a', 1 div (@fldNm = 'yes')), 
        substring('b', 1 div (@fldNm = '')) 
      )"/> 
    <xsl:text/> 
    </xsl:template> 

</xsl:stylesheet> 

... применяется к следующему образца XML:

<t> 
    <e fldNm="yes"/> 
    <e fldNm=""/> 
</t> 

... разыскиваемый результат получается:

The value is: a 
The value is: b 
0

Использование:

substring('yx', 1 + (@fldNm = 'yes'), 1) 

Оценка этого выражения выражает символ «x», если значение атрибута (контекстного узла) с именем «fldNm» равно «да», иначе оценка производит символ «y».

Здесь мы используем тот факт, что по определению:

number(true()) = 1 

и

number(false()) = 0 
+0

Это довольно хороший ответ, и он красиво лаконичен. Но ответ Абаха кажется более изменчивым, и это то, что я использовал. –

+0

@BrianWren, Да, ABach узнал эту более общую технику из одного из моих ответов (цитируется им). Тем не менее, я рекомендую использовать эту более общую технику, только если более специализированное и эффективное решение невозможно. Чтобы сделать * в этом случае * конкатенацию двух подстрок, одним из аргументов из которых является один, деленный на нуль, на самом деле чрезмерно растягивается и значительно более неэффективен, сложный и трудный для понимания для среднего программиста XSLT. –