Re[3]: Как подставить значение поля в XPath
От: Zerg Россия  
Дата: 24.04.02 06:36
Оценка: 1 (1)
Здравствуйте Aeneas, Вы писали:

A>Извиняюсь, забыл сказать, что тегов attribute много и лукапов в общем случае может быть несколько.

A>В момент отработки приведенного фрагмента шаблона мы находимся внутри одного из тегов attribute.
A>Естественно нужно подставить значение элемента name именно из текущего тега attribute

Если я правилино понял, то XML будет подобен следующему:


<?xml version="1.0" encoding="UTF-8"?>
<content stylesheet="attributevalues.xsl" username="Permanent User" userid="122" information="">
    <userattributegroups count="5">
        <userattributegroup id="2">
            <groupsequence>2</groupsequence>
            <description>Travel</description>
            <userattributes count="7">
                <attribute id="9" attributevalueid="0">
                    <name>country</name>
                    <description>Country</description>
                    <maxlength>50</maxlength>
                    <sequence>7</sequence>
                    <editable>no</editable>
                    <storageclass>C</storageclass>
                    <userattributetypedescription>lookup</userattributetypedescription>
                    <charvalue/>
                    <memovalue/>
                </attribute>
                <attribute id="9" attributevalueid="0">
                    <name>country2</name>
                    <description>Country</description>
                    <maxlength>50</maxlength>
                    <sequence>7</sequence>
                    <editable>no</editable>
                    <storageclass>C</storageclass>
                    <userattributetypedescription>lookup</userattributetypedescription>
                    <charvalue/>
                    <memovalue/>
                </attribute>             
            </userattributes>
        </userattributegroup>
    </userattributegroups>
    <lookup count="2" name="country" codepresent="no" editable="yes" or-ganisationpresent="no" descriptionlength="50">
        <element id="3" description="Afghanistan"/>
        <element id="6" description="Albania"/>
    </lookup>
    <lookup count="2" name="country2" codepresent="no" editable="yes" or-ganisationpresent="no" descriptionlength="50">
        <element id="3" description="Russia"/>
        <element id="6" description="Ukraina"/>
    </lookup> [/b] 
</content>


тогда беря XSL такого вида:

<?xml version="1.0"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    
<xsl:template match="/">
<!-- для примера переберу все теги attribute -->
<xsl:for-each select="//attribute">

    <select name="attr{@id}" size="1">
        <xsl:if test="editable='no' and charvalue!=''"><xsl:attribute name="disabled">true</xsl:attribute></xsl:if>
        <option value="">Not specified</option>
        <xsl:variable name="Name" select="name"/>
        <xsl:for-each select="//lookup[@name=$Name]/element">
            <xsl:sort select="@description"/>
            <option>
                <xsl:if test="charvalue=@description"><xsl:attribute name="selected"/></xsl:if>
                <xsl:attribute name="value"><xsl:value-of select="@description"/></xsl:attribute>
                <xsl:value-of select="@description"/>
            </option>
        </xsl:for-each>
    </select>

</xsl:for-each>    
</xsl:template>

</xsl:stylesheet>


получаем на выходе:

<select name="attr9" size="1">
    <option value="">Not specified</option>
    <option value="Afghanistan">Afghanistan</option>
    <option value="Albania">Albania</option>
</select>
<select name="attr9" size="1"><option value="">Not specified</option>
    <option value="Russia">Russia</option>
    <option value="Ukraina">Ukraina</option>
</select>


Это то, что было необходимо?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.