2015-03-19 3 views
0

Я использую переменную в моем XSLT, чтобы выбрать правильный узел, а затем я хочу использовать эту переменную, чтобы получить его дочерние узлы:Как получить значение дочернего узла набора узлов?

<xsl:variable name="CorrectNode"> 
       <xsl:choose> 
       <xsl:when test="$Formula='14'"> 
        <xsl:value-of select="f:node14" /> 
        </xsl:when> 
        <xsl:when test="$Formula='15'"> 
        <xsl:value-of select="f:node15" /> 
        </xsl:when> 
       </xsl:choose> 
</xsl:variable> 
<Revenue> 
    <xsl:value-of select="msxsl:node-set($CorrectNode)/f1:revenueValue" /> 
</Revenue> 

Однако это не выводит ничего. Если у меня есть:

<xsl:value-of select="msxsl:node-set($CorrectNode)" /> 

или

<xsl:copy-of select="msxsl:node-set($CorrectNode)" /> 

то значение или узлы выводятся, но как получить доступ к своим детям?

ответ

0

Этот фрагмент устанавливает переменную в фрагмент результирующего дерева, состоящий из одного текстового узла, значение которого является строковым значением соответствующего элемента. Переменная не относится к самому элементу, только его строковое значение.

Но вам не нужен формат RTF и node-set функции здесь все, как вы можете сделать это с прямым select, используя соответствующие предикаты, так как test выражений не являются контекстно-зависимым (тест как $Formula = '15' дает то же значение независимо от того, является ли текущий контекст является f:node15 элемент или его родитель):

<xsl:variable name="CorrectNode" 
       select="f:node14[$Formula = '14'] | f:node15[$Formula = '15']" /> 

Таким образом, переменная является ссылкой к исходному элементу, и вы можете перемещаться оттуда с помощью XPath.

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