переопределение проверки узла с помощью xsl compile - PullRequest
1 голос
/ 30 августа 2011

Я хотел бы построить следующую структуру xsl ниже:

<body>
<item></item>
<item></item>
<item></item>
</body>

количество элементов между узлом тела является переменным, поэтому я хочу вызвать шаблон с параметром 'place', где, если значение равно start или end, узел тела создается или закрывается соответственно. Основная структура кода приведена ниже. У меня есть проблема в том, что невозможно использовать этот метод, так как вы не можете открыть узел при закрытии оператора when. Как я могу переопределить это поведение компилятора xsl

<xsl:choose>
  <xsl:when test="$place='start'">
   <body>
  </xsl:when>
  <xsl:when test="$place='end'">
   </body>
  </xsl:when>
</xsl:choose>

Ответы [ 3 ]

1 голос
/ 30 августа 2011

Я хочу вызвать шаблон с параметром 'place', если значение равно начало или конец узла тела создан или закрыт соответственно

Это невозможно. Вы не можете иметь неправильно вложенные теги в XSLT (точно так же, как у вас не может быть неправильно вложенных скобок / скобок / структур управления в любом другом языке программирования ).

К счастью, это также совершенно не нужно. Это будет делать то, что вы хотите:

<xsl:template match="body">
  <body>
    <xsl:apply-templates select="item" /> 
  </body>
</xsl:template>

<xsl:template match="item">
  <!-- whatever you want to do with the items -->
</xsl:template>
0 голосов
/ 30 августа 2011

XSLT не «создает» и «закрывает» узлы как отдельные операции: вы не можете выполнять одно и другое. Он строит дерево результатов, и в дереве результатов либо существует узел, либо его нет. Вы думаете о тегах, когда вам нужно думать о дереве узлов.

0 голосов
/ 30 августа 2011

Вам нужно что-то вроде этого:

<xsl:param name="tot" select="3"/>

<xsl:template match="body">
  <body>
    <xsl:call-template name="add-items" /> 
  </body>
</xsl:template>

<xsl:template name="add-items">
 <xsl:param name="num" select="1"/>
 <item />
 <xsl:if test="$num &lt; $tot">
  <xsl:call-template name="add-items">
   <xsl:with-param name="num" select="$num + 1"/>
  </xsl:call-template>
 </xsl:if>
</xsl:template>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...