2014-12-24 2 views
1

Я ищу динамически распечатывать элементы, которые существуют в списке управления, используя только собственные функции XSLT2.0.Выбор динамического элемента XSLT

<xsl:variable name="controlList">name</xsl:variable> 

<M N="name" V="Bill Billson"/> 
<M N="address" V="1234 street name"/> 
<M N="country" V="United Kingdom"/> 
<M N="phone" V="123456789"/> 

Вывод Требуемый:

Bill Billson 

В конечном счете, однако он должен справиться с несколькими значениями в списке управления, например,

<xsl:variable name="controlList">name,address,phone</xsl:variable> 

До сих пор я пробовал много разных перестановок, но не получал требуемых результатов.

<xsl:value-of select="M[@N='{$controlList}']/@V"/> 

или

<xsl:for-each select="M"> 
     <xsl:value-of select="/[@name=$controlList]/@V"/> 
    </xsl:for-each> 

Любая помощь будет принята с благодарностью. Это может быть даже не доступно с помощью встроенных функций XSLT2.0.

+0

Я пытаюсь дальше расширять это, переходя в первой этикетке должны быть распечатаны, а во-вторых, имя поля получить значение от, возможно ли это? например, контрольный список будет «Полное имя, имя, домашний адрес, адрес, номер мобильного телефона, телефон» – pdev84

ответ

1

Определите переменную как <xsl:variable name="controlList" select="'name', 'address', 'phone'"/>, тогда yo может использовать M[@N = $controlList]/@V. См. Пример http://xsltransform.net/6qVRKw1.

Если вы не можете настроить первую переменную как последовательность строк, тогда вычислите вторую, например,

<xsl:variable name="controlList">name,address,phone</xsl:variable> 
<xsl:variable name="controlSeq" select="tokenize($controlList, ',')"/> 

, а затем вы можете также сделать = сравнение в

<xsl:value-of select="M[@N = $controlSeq]/@V"/> 
+0

Большое спасибо! – pdev84

Смежные вопросы