встраивание тегов в xslt - PullRequest
3 голосов
/ 08 июня 2011

У меня есть этот xslt, который работает:

<xsl:when test="area_of_expertise">

    <div>
        <xsl:value-of select="area_of_expertise"/>
    </div>
</xsl:when>

но мне нужно следующее:

<xsl:when test="area_of_expertise">

    <div id="<xsl:value-of select="area_of_expertise"/>">
        <xsl:value-of select="area_of_expertise"/>
    </div>
</xsl:when>

Однако во втором примере есть ошибки .. кто-нибудь знает почему?

Кстати, есть ли способ, которым мы можем преобразовать имя узла area_of_expertise в areaOfExperiseLabel и вставить его в качестве идентификатора? вывод, который мне действительно нужен, это:

<div id="areaOfExpertiseLabel">
    asasdasdasd
</div>

Ответы [ 5 ]

3 голосов
/ 08 июня 2011

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

Чтобы сделать то, что вы пытаетесь сделать:

<xsl:when test="title">

    <div id="{title}">
        <xsl:value-of select="title"/>
    </div>
</xsl:when>

Вы можете поместить любой вид селектора внутритеги {} или даже ссылочные переменные, если у вас есть что-то сложное.

<xsl:variable name="some_complex_variable">
    <xsl:value-of select="title"/>
</xsl:variable>

<xsl:when test="title">

    <div id="{$some_complex_variable}">
        <xsl:value-of select="title"/>
    </div>
</xsl:when>

Третий, многословный способ сделать это - динамически присоединить атрибут с помощью xsl: attribute:

<xsl:when test="title">

    <div>
        <xsl:attribute name="id" select="title"/>
    </div>
</xsl:when>
1 голос
/ 08 июня 2011

Для второй части попробуйте использовать этот шаблон:

<xsl:template name="parse">
        <xsl:param name="input"/>
        <xsl:param name="position"/>


        <xsl:if test="$position &lt;= string-length($input)">

            <xsl:choose>
                <xsl:when test="substring($input, $position, 1) = '_'">
                    <xsl:value-of select="translate(substring($input, $position + 1, 1), 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"/>

                    <xsl:call-template name="parse">
                        <xsl:with-param name="input" select="$input"/>
                        <xsl:with-param name="position" select="$position + 2"/>
                    </xsl:call-template>
                </xsl:when>

                <xsl:otherwise>

                    <xsl:value-of select="substring($input, $position, 1)"/>

                    <xsl:call-template name="parse">
                        <xsl:with-param name="input" select="$input"/>
                        <xsl:with-param name="position" select="$position + 1"/>
                    </xsl:call-template>
                </xsl:otherwise>
            </xsl:choose>

        </xsl:if>


    </xsl:template>

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

<xsl:call-template name="parse">
            <xsl:with-param name="input" select="'area_of_expertise'"/>
            <xsl:with-param name="position" select="1"/>
        </xsl:call-template>
1 голос
/ 08 июня 2011

Для 1-й части вы можете использовать:

<xsl:when test="area_of_expertise">
    <div>
        <xsl:attribute name="id">
            <xsl:value-of select="area_of_expertise"/>
        </xsl:attribute>

        <xsl:value-of select="area_of_expertise"/>
    </div>
</xsl:when>
1 голос
/ 08 июня 2011

Во второй части, конвертирующей из подчеркивания в регистр верблюдов, вы можете посмотреть Обработка строк в стандартной библиотеке XSLT . С str:subst() для разделения на подчеркивания, str:to-camelcase() для изменения регистра букв и concat() для добавления суффикса "Label", вы должны быть установлены.

0 голосов
/ 08 июня 2011

Это может быть глупый ответ, но, похоже, вам нужен этот простой след:

<xsl:when test="area_of_expertise">
    <div id="areaOfExperiseLabel">
        <xsl:value-of select="area_of_expertise"/>
    </div>
</xsl:when>

В противном случае, почему вы вставляете <xsl:value-of select="area_of_expertise"/> для @id, если вам тогда нужна другая строка?

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