Xslt - выделить элемент в списке.
От: Аноним  
Дата: 12.07.06 13:16
Оценка:
Добрый день.
Посоветуйте решение задачки: с помощью xslt выделить элемент в Select-е.
т.е. есть html список, value для выделения береться из xml.
Нужно в xslt скрипте как-то выделить элемент.

Благодарю за помощь.
Re: Xslt - выделить элемент в списке.
От: Beard-electronic Россия  
Дата: 12.07.06 13:50
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Добрый день.

А>Посоветуйте решение задачки: с помощью xslt выделить элемент в Select-е.
А>т.е. есть html список, value для выделения береться из xml.
А>Нужно в xslt скрипте как-то выделить элемент.

А>Благодарю за помощь.


Эээ — не совсем понятно — что на входе и что должно быть на выходек?
Re: Xslt - выделить элемент в списке.
От: ibnTeo Россия http://ibnteo.klava.org/
Дата: 12.07.06 14:38
Оценка:
> Посоветуйте решение задачки: с помощью xslt выделить элемент в Select-е.
> т.е. есть html список, value для выделения береться из xml.
> Нужно в xslt скрипте как-то выделить элемент.


Входной док:
<doc>
<select value="2">
<item title="Item 1" value="1"/>
<item title="Item 2" value="2"/>
<item title="Item 3" value="3"/>
</select>
</doc>

XSLT:
<xsl:template name="select">
<select name="test">
<xsl:for-each select="item">
<option value="{@value}">
<xsl:if test="parent::select/@value=current()/@value">
<xsl:attribute name="selected">selected</xsl:attribute>
</xsl:if>
<xsl:value-of select="@title"/>
</option>
</xsl:for-each>
</select>
</xsl:template>
Posted via RSDN NNTP Server 2.0
Re[2]: Xslt - выделить элемент в списке.
От: Аноним  
Дата: 12.07.06 15:02
Оценка:
Здравствуйте, Beard-electronic, Вы писали:

BE>Эээ — не совсем понятно — что на входе и что должно быть на выходек?


input xml (другие атрибуты убрал):
<row Country="BR" />
сам список находится в xslt шаблоне:
<xsl:variable name="country">
<SELECT>
<option value="AR">Argentina</option>
<option value="BZ">Belize</option>
<option value="BO">Bolivia</option>
<option value="BR">Brazil</option>
<option value="CL">Chile</option>
<option value="CO">Colombia</option>
<option value="CR">Costa rica</option>
<option value="DO">Rep. Dominicana</option>
<option value="EC">Ecuador</option>
<option value="SV">El Salavador</option>
<option value="GT">Guatemala</option>
<option value="HN">Honduras</option>
<option value="MX">Mexico</option>
<option value="NI">Nicaragua</option>
<option value="PA">Panama</option>
<option value="PY">Paraguay</option>
<option value="PE">Peru</option>
<option value="VE">Venezuela</option>
<option value="UY">Uruguay</option>
</SELECT>
</xsl:variable>
нужно чтобы в html-е элемент Brazil был выделен
Переместить список в xml не предлагайте. неправильно это по-моему.
Re[3]: Xslt - выделить элемент в списке.
От: Beard-electronic Россия  
Дата: 12.07.06 15:57
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Переместить список в xml не предлагайте. неправильно это по-моему.


Почему не правильно? Я бы как раз и завел отдельный XML-ик, в котором
только бы и лежал список стран, и пользовал бы его через функцию
document() — можно было бы воспользоваться методом,
предложенным ibnTeo, только нужное значение стоит засунуть
сразу в переменную, чтоб побыстрее работало...
Re[4]: Xslt - выделить элемент в списке.
От: Аноним  
Дата: 12.07.06 16:10
Оценка:
Здравствуйте, Beard-electronic, Вы писали:

BE>Здравствуйте, Аноним, Вы писали:


А>>Переместить список в xml не предлагайте. неправильно это по-моему.


BE>Почему не правильно? Я бы как раз и завел отдельный XML-ик, в котором

BE>только бы и лежал список стран, и пользовал бы его через функцию
BE>document() — можно было бы воспользоваться методом,
BE>предложенным ibnTeo, только нужное значение стоит засунуть
BE>сразу в переменную, чтоб побыстрее работало...

вообщем так наверное можно сделать.
но мне интересно как это сделать через xslt.
Re[5]: Xslt - выделить элемент в списке.
От: Lloyd Россия  
Дата: 12.07.06 19:52
Оценка:
Здравствуйте, Аноним, Вы писали:

А>вообщем так наверное можно сделать.

А>но мне интересно как это сделать через xslt.


<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" version="1.0">
    <xsl:variable name="country">
        <SELECT>
            <option value="AR">Argentina</option>
            <option value="BZ">Belize</option>
            <option value="BO">Bolivia</option>
            <option value="BR">Brazil</option>
            <option value="CL">Chile</option>
            <option value="CO">Colombia</option>
            <option value="CR">Costa rica</option>
            <option value="DO">Rep. Dominicana</option>
            <option value="EC">Ecuador</option>
            <option value="SV">El Salavador</option>
            <option value="GT">Guatemala</option>
            <option value="HN">Honduras</option>
            <option value="MX">Mexico</option>
            <option value="NI">Nicaragua</option>
            <option value="PA">Panama</option>
            <option value="PY">Paraguay</option>
            <option value="PE">Peru</option>
            <option value="VE">Venezuela</option>
            <option value="UY">Uruguay</option>
        </SELECT>
    </xsl:variable>
    <xsl:template match="/">
        <HTML>
            <BODY><xsl:apply-templates /></BODY>       
        </HTML>
    </xsl:template>
    
    <xsl:template match="row">
        <xsl:variable name="selected" select="@Country" />
        <SELECT>
            <xsl:for-each select="msxsl:node-set($country)//option">
                <option value="{@value}">
                    <xsl:if test="$selected = @value">
                        <xsl:attribute name="selected" />
                    </xsl:if>
                    <xsl:value-of select="." />
                </option>
            </xsl:for-each>
        </SELECT>
    </xsl:template>
</xsl:stylesheet>
Re[5]: Xslt - выделить элемент в списке.
От: Beard-electronic Россия  
Дата: 13.07.06 00:17
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Beard-electronic, Вы писали:


BE>>Здравствуйте, Аноним, Вы писали:


А>>>Переместить список в xml не предлагайте. неправильно это по-моему.


BE>>Почему не правильно? Я бы как раз и завел отдельный XML-ик, в котором

BE>>только бы и лежал список стран, и пользовал бы его через функцию
BE>>document() — можно было бы воспользоваться методом,
BE>>предложенным ibnTeo, только нужное значение стоит засунуть
BE>>сразу в переменную, чтоб побыстрее работало...

А>вообщем так наверное можно сделать.

А>но мне интересно как это сделать через xslt.

Так это через XSLT

Если хочется использовать именно переменную, то придется ограничиться расширением
конкретного трансформера (например, как предложил Lloyd), если таковые есть,
ну или написать свое, если это возможно...

Есть и другой способ использования данных, прописанных в скрипте — здесь
Автор: kan_izh
Дата: 22.05.06
Re[6]: Xslt - выделить элемент в списке.
От: Аноним  
Дата: 13.07.06 07:58
Оценка:
Здравствуйте, Lloyd, Вы писали:

Спасибо большое всем за помощь.
Lloyd-у отдельно респект. хотелось именно такое решение.

P.S. не хотел дискутировать с Beard-electronic и ibnTeo по поводу способа решения. сорри, времени был дефицит.
Сейчас можно подробнее обосновать мое требование.
1. в xml у меня храняться данные, в xslt — html и скритп преобразования. Не вижу смысла смешивать данные и представление.
2. используется эта петрушка в ajax приложении, xslt загружается один раз и хранится на клиенте. далее подгружаются только xml данные и преобразование происходит уже на клиенте. поэтому тянуть каждый раз с сервера html-список нецелесообразно.
Re[7]: Xslt - выделить элемент в списке.
От: Lloyd Россия  
Дата: 13.07.06 08:19
Оценка:
Здравствуйте, Аноним, Вы писали:

А>2. используется эта петрушка в ajax приложении, xslt загружается один раз и хранится на клиенте. далее подгружаются только xml данные и преобразование происходит уже на клиенте. поэтому тянуть каждый раз с сервера html-список нецелесообразно.


В таком случае лучше моим методом не пользоваться.
Re[7]: Xslt - выделить элемент в списке.
От: Beard-electronic Россия  
Дата: 13.07.06 12:22
Оценка:
Здравствуйте, Аноним, Вы писали:

А>P.S. не хотел дискутировать с Beard-electronic и ibnTeo по поводу способа решения. сорри, времени был дефицит.

А>Сейчас можно подробнее обосновать мое требование.
А>1. в xml у меня храняться данные, в xslt — html и скритп преобразования. Не вижу смысла смешивать данные и представление.

Так хранение в отдельном файле списка стран нчего не "смешивает", как раз наоборот — придает до гибкость — если
у нас несколько скриптов будут его юзать, то на придется в каждый его вставлять, плюс, если мы хотим
добавить/удалить страны, то можно будет это сделать в одном месте...

А>2. используется эта петрушка в ajax приложении, xslt загружается один раз и хранится на клиенте. далее подгружаются только xml данные и преобразование происходит уже на клиенте. поэтому тянуть каждый раз с сервера html-список нецелесообразно.


Вот этот файл тоже можно подрузить только один раз — и ничего не надо будет тянуть каждый раз.


И все-таки почитай здесь
Автор: kan_izh
Дата: 22.05.06
— на надо
привязывться к конкретному трансформеру и данные будут в скрипте, как вам желательно.
Re: Xslt - выделить элемент в списке.
От: Tazman Россия  
Дата: 20.07.06 17:44
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Добрый день.

А>Посоветуйте решение задачки: с помощью xslt выделить элемент в Select-е.
А>т.е. есть html список, value для выделения береться из xml.
А>Нужно в xslt скрипте как-то выделить элемент.

А>Благодарю за помощь.



мне помогло следующее

<xsl:template name="doLinkList">
    <xsl:param name="idx"/>
    <xsl:for-each select="//content/link_list/link">
        <option>
            <xsl:attribute name="value"><xsl:value-of select="./link_id"/></xsl:attribute>
            <xsl:if test="$idx = ./link_id">
                <xsl:attribute name="selected">enabled</xsl:attribute>
            </xsl:if>
            <xsl:value-of select="./link_name"/>
        </option>
    </xsl:for-each>
</xsl:template>



вызываю так:


<select>
    <xsl:attribute name="name">linkID</xsl:attribute>
    <xsl:call-template name="doLinkList">
        <xsl:with-param name="idx"/>
    </xsl:call-template>
</select><br/>
Хорошо иметь достойных потомков, но слава принадлежит нашим предкам. (Плутарх)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.