Необычное поведение шаблона с XSL - PullRequest
1 голос
/ 30 декабря 2010

Опыт очень странного поведения с очень простым использованием XSL и XSLT.

Вот пример кода.

<xsl:template match="check">

<div class="check">

<xsl:apply-templates mode="check">
<xsl:with-param name="checkName">testVariable</xsl:with-param>
</xsl:apple-templates>

</div>

</xsl:template>

Шаблон, названный выше

<xsl:template match="option" mode="check">
    <xsl:param name="checkName" />

    <div class="option">
        <input type="checkbox">
        </input>

        <label>
            testText
        </label>
    </div>
</xsl:template>

Довольно просто, верно? Он должен для каждого экземпляра экземпляра в XML создать флажок с жестко закодированной меткой.

Однако я получаю

<div class="check"></div>
<div class="option>Checkbox stuff here</div>
<div class="option>Checkbox stuff here</div>
<div class="option>Checkbox stuff here</div>
<div class="option>Checkbox stuff here</div>
<div class="check"></div>
<div class="option>Checkbox stuff here</div>
<div class="option>Checkbox stuff here</div>
<div class="option>Checkbox stuff here</div>
<div class="option>Checkbox stuff here</div>

Вот пример XML

<check><option key="1"/><option key="0"/><option
            key="0"/><option key="0"/><option
        key="0"/></check>

Кто-нибудь знает, что происходит? : D

1 Ответ

2 голосов
/ 30 декабря 2010

Проблема в XML-документе / коде, которые вы нам не показали, или, что менее вероятно, вы используете глючный XSLT-процессор.

Это преобразование (Ваш код заключен в <xsl:stylesheet>):

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

 <xsl:template match="check">
   <div class="check">
    <xsl:apply-templates mode="check">
     <xsl:with-param name="checkName">testVariable</xsl:with-param>
    </xsl:apply-templates>
   </div>
 </xsl:template>

  <xsl:template match="option" mode="check">
    <xsl:param name="checkName" />
    <div class="option">
      <input type="checkbox"></input>
        <label>testText</label>
    </div>
 </xsl:template>
</xsl:stylesheet>

при применении к предоставленному документу XML :

<check>
    <option key="1"/>
    <option key="0"/>
    <option key="0"/>
    <option key="0"/>
    <option key="0"/>
</check>

дает требуемый, правильный результат :

<div class="check">
    <div class="option">
        <input type="checkbox"></input>
        <label>testText</label>
    </div>
    <div class="option">
        <input type="checkbox"></input>
        <label>testText</label>
    </div>
    <div class="option">
        <input type="checkbox"></input>
        <label>testText</label>
    </div>
    <div class="option">
        <input type="checkbox"></input>
        <label>testText</label>
    </div>
    <div class="option">
        <input type="checkbox"></input>
        <label>testText</label>
    </div>
</div>

Я убедился, что преобразование дает идентичные результаты при запуске с :

  • Saxon 6.5.4

  • MSXML3, MSXML4, MSXML6

  • .NET XslCompiledTransform и XslTransform

  • Саксонский 9.1.05

  • AltovaXML (XML-SPY)

  • XQSharp

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