Выполнение проверки в XSL - PullRequest
       18

Выполнение проверки в XSL

1 голос
/ 16 августа 2010

Я пытаюсь выполнить проверку отдельных узлов XML-файла и в зависимости от содержимого определенного узла что-то сделать, например, если тип является bool, отображать флажок, или если тип является текстовым, отображать текстовое поле илираскрывающийся список опций.

Например:

<Questions>
<Question>
<Data>What gender are you?</Data>
<Type>pulldown</Type>
</Question>
<Question>
<Data>Do you like Chocolate?</Data>
<Type>checkbox</Type>
</Question>
</Questions>

Заранее спасибо

Я не уверен, стоит ли мне использовать xsl:choose/xsl:when или xsl:if

Ответы [ 2 ]

3 голосов
/ 16 августа 2010

<xsl:choose> можно и всегда следует избегать, если это возможно .

Это XSLT-преобразование демонстрирует, как обрабатывать различные типы Question по-разному без какой-либо жесткой условной логики. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:template match="Question[Type='pulldown']"> <!-- Implement pull-down here --> </xsl:template> <xsl:template match="Question[Type='checkbox']"> <!-- Implement checkbox here --> </xsl:template> </xsl:stylesheet> <xsl:choose> следует отменить по той же причине, которая заставляет нас в ООП избегать оператора switch (тип) и использовать вместо этого виртуальные функции . Это делает код короче, уменьшает вероятность совершения ошибки, невероятно расширяемо и поддерживаемо, поддерживает будущий код даже до его написания.

1 голос
/ 16 августа 2010

Конструкция, которая кажется наиболее подходящей для ваших нужд: xsl:choose:

<xsl:template match="Question">
 <xsl:choose>
  <xsl:when test="Type = 'checkbox'">
      <!-- output checkbox code -->
  </xsl:when>
  <xsl:when test="Type = 'pulldown'">
      <!-- output pulldown code -->
  </xsl:when>
  <xsl:otherwise>
      <!-- output default code -->
  </xsl:otherwise>
 </xsl:choose>
</xsl:template>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...