Почему функция generate-id () дважды возвращает один и тот же идентификатор? - PullRequest
1 голос
/ 03 декабря 2010

У меня есть какой-то XSLT, который я не написал, но я должен поддерживать его.В некоторых моментах он использует generate-id () для создания пустого div, который затем обрабатывается скриптом.Проблема в том, что div находится внутри другого div (я думал, что это немного бессмысленно, но в любом случае приемлемо), и оба получают одинаковый идентификатор!Я попробовал это с Xalan, а затем снова с трансформатором JRE с тем же результатом.Затем я попытался использовать отладчик Eclipse / Xalan XSLT, и когда я перехожу через эту штуку, все работает правильно ...

XSLT выглядит следующим образом:

<xsl:template match="listed">
    <xsl:variable name="showwhat">
        <xsl:call-template name="IdentifyAudience"/>
    </xsl:variable>
    <xsl:if test="string-length($showwhat) &gt; 0">
        <div>
            <xsl:attribute name="id">
                <xsl:value-of select="generate-id()"/>   
            </xsl:attribute>
            <xsl:call-template name="Blah"/>
            <xsl:apply-templates/>
        </div>
    </xsl:if>
</xsl:template>

ИФрагмент XML выглядит следующим образом:

<listed id='ID39AF705AE17A000F337B000A' mode='html'>
    <ul>
        <li>Blah blah</li>
    </ul>
</listed>
<listed id='ID39AF715892AE000F337B002B' mode='html'>
    <ul>
         <li>Blech blech.</li>
    </ul>
</listed>

Я понимаю, что это немного сложно - есть какие-то подсказки?Пожалуйста

1 Ответ

4 голосов
/ 03 декабря 2010

Проблема в коде, который вы нам не показали.

generate-id() Функция возвращает строку уникального идентификатора для узла аргумента или узла контекста в противном случае .

Итак, он уникален для уникального узла ... Вы, вероятно, вызываете функцию p / 0 в двух шаблонах контента с одним и тем же контекстным узлом.Как это возможно?Ну ...

<xsl:call-template name="Blah"/> 

call-template инструкция не меняет контекстный узел

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