2011-12-15 5 views
1


Я пытаюсь создать преобразование XSL. Мой XML выглядит следующим образом:Значение XLST элемента с использованием XPATH и текущего атрибута атрибута

<DataRepository> 
    <Contents> 
    <Content uniqueID="1" name="some.name" ...> 
     <Description>Content description</Description> 
    </Content> 
    ... 
    </Contents> 
    <Tests> 
    <Test> 
     <Content uniqueID="1"/> 
     <Content uniqueID="2"/> 
     <Content uniqueID="N"> 
    </Test> 
    ... 
    </Tests> 
</DataRepository> 

В преобразованном документе я хочу представить содержание тестов, показывая описание содержимого.
XLS фрагмент кода отвечает за это:

<xsl:for-each select="DataRepository/Tests/Test"> 
    <h2><u><xsl:value-of select="@name"/></u></h2> 
    <ol> 
     <xsl:for-each select="Content"> 
     <li><xsl:value-of select="//DataRepository/Contents/ 
       Content[@uniqueID='{@uniqueID}']/Description"/></li> 
     </xsl:for-each> 
    </ol> 
    </xsl:for-each> 

Я получаю пустые строки в выводе нет описания не показано. В случае, если я заменяю {@uniqueID} фактическим номером, он работает.

Не могли бы вы предложить, что я делаю неправильно?

+0

Ваш исходный документ не правильно сформированный XML. Не могли бы вы также привести пример желаемого результата? Неясно, что вы думаете, '' {@uniqueID} 'должен делать. –

ответ

3

Используйте функцию current(), чтобы ссылаться на атрибут uniqueID текущего узла:

<xsl:value-of select="/DataRepository/Contents/ 
      Content[@uniqueID=current()/@uniqueID]/Description"/> 
+1

Это решило проблему! Благодаря! – alzix

+0

Не могли бы вы отметить ответ как принято? ТИА – lkuty

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