Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > XML, XSL > получить значение атрибута


Автор: Шухарт 6.11.2011, 00:11
Снова здравствуйте!
Задача: присвоить атрибут элементу если его значение (value) совпадает с атрибутом обрабатываемого узла xml. Не получается выковырять атрибут этого самого элемента. Исходный xml такой:
Код

<sites>
  <site id="1" doctype="1"/>
  <site id="2" doctype="2"/>
</sites>

Пока решил задачу так: 
Код

<xsl:for-each select="sites/site">
<input type="radio" name="doctype" id="html" value="1">
<xsl:if test="@doctype = 1"><xsl:attribute name="checked">true</xsl:attribute></xsl:if>
</input>
html</label>
<label for="xhtml"><input type="radio" name="doctype" id="xhtml" value="2">
<xsl:if test="@doctype = 2"><xsl:attribute name="checked">true</xsl:attribute></xsl:if>
</input>
</xsl:for-each>

Но хотелось бы автоматизировать, чтобы устанавливать атрибуты вроде selected, checked в циклах. Для этого надо вытаскивать внутри input'a значение его @value. Но не получается. Что-то вроде такого хотелось бы: 
Код

<input type="radio" name="doctype" id="html" value="1">
<xsl:if test="@doctype = self::@value"><xsl:attribute name="checked">true</xsl:attribute></xsl:if>
</input>
html</label>
<label for="xhtml"><input type="radio" name="doctype" id="xhtml" value="2">
<xsl:if test="@doctype = self::@value"><xsl:attribute name="checked">true</xsl:attribute></xsl:if>
</input>

Заранее благодарен. 

Автор: diadiavova 6.11.2011, 00:22
Шухарт, так, а variable чем не подходит? Или я что-то не так понял? smile 
Код

<xsl:variable name="doctype" select="1">
<xsl:variable name="checked">true</xsl:variable>
<xsl:if test="@doctype = $doctype">
    <xsl:attribute name="checked" value="{$checked}"/>
</xsl:if>

Ну как-то так.

Автор: Шухарт 6.11.2011, 00:32
Так я имею в @doctype значение текущего элемента, без проблем. А надо узнать совпадает ли оно с value input. Вот как его выколупать? 
Упрощённо: 
Код

<input value="1">
<xsl:value-of select="(как тут вывести value?)"/>
</input>

Автор: diadiavova 6.11.2011, 09:25
Цитата(Шухарт @  6.11.2011,  01:32 Найти цитируемый пост)
 А надо узнать совпадает ли оно с value input. Вот как его выколупать? 

А в инпут оно откуда берется? Ведь это выходной элемент и ты сам его создаешь. Ну объяви variable до инпута и впиши значение в оба места. 
Код

<xsl:variable name="value" select="1"/>
<input value="{$value}">
<xsl:value-of select="{$value}"/>
</input>

Только так. А получить значение выходного элемента ты не сможешь.

Автор: Шухарт 6.11.2011, 11:30
Цитата(diadiavova @ 6.11.2011,  09:25)
А получить значение выходного элемента ты не сможешь.

Ууу, понятно. Вот это жаль. 
value не из xml берётся, прямо прописано в xsl. значить придутся ещё одну переменную наплодить, думал более изящно можно, через xPath как-нибудь... 
Спасибо за участие, diadiavova. 

Автор: diadiavova 6.11.2011, 13:52
Цитата(Шухарт @  6.11.2011,  12:30 Найти цитируемый пост)
value не из xml берётся, прямо прописано в xsl. 

Ну в принципе нужные значения(если их много) можно в отдельный документ записать и вытаскивать при помощи функции document.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)