2010-10-19 2 views
1

У меня есть следующий код snipsetИспользование переменной и XPATH, чтобы выбрать значение элемента

<xsl:variable name="cId" value="c001" /> 

<clients> 
    <c001>Mario</c001> 
    <c002>Luigi</c002> 
</clients> 

И на основе значения переменной, нужно выбрать правильный элемент под клиентов.

Для примера. переменной cId присваивается значение c001. Есть ли способ выбрать значение c001 с помощью XPATH или XSLT?

я могу сделать это так, но кажется, что для цикла немного более убить

<xsl:variable name="cId" value="c001" /> 
<xsl:for-each select="/clients/*">   
    <xsl:variable name="cNode" select="local-name()"/>   
    <xsl:if test="$cNode = $cId">     
     <xsl:value-of select="."/> 
    </xsl:if> 
</xsl:for-each> 

Код выше возвращает «Марио»

Спасибо за помощь.

ответ

1

Этот вопрос не очень понятно, но вы, вероятно, хотите что-то вроде этого:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:my="my:my"> 

<my:catalog> 
    <catalog> 
    <client> 
     <clientid>c001</clientid> 
     <clientid>c003</clientid> 
     <clientid>c004</clientid> 
     <clientid>c005</clientid> 
    </client> 
    </catalog> 
</my:catalog> 

<xsl:variable name="vCat" 
    select="document('')/*/my:catalog"/> 

<xsl:output omit-xml-declaration="yes" indent="yes"/> 

<xsl:template match="/"> 
    <xsl:copy-of select= 
    "/clients/* 
     [name() = $vCat/catalog/client/clientid] 
     /text() 
    "/> 
</xsl:template> 
</xsl:stylesheet> 

когда это преобразование применяется на следующий документ XML:

<clients> 
    <c001>Stars Company</c001> 
    <c002>Bold Unregistered</c002> 
</clients> 

в Получен желаемый результат:

Stars Company 
+0

+1 Хороший ответ ussing 'fn: name()'. – 2010-10-19 13:33:48

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