2016-11-20 6 views
1

Я хочу получить значение определенного узла, указанного его атрибутом id. Но поведение моего анализатора XSL, Saxon, не так, как я ожидал, что он сработает.Сравнение значений атрибутов в XPath

Это мой код XSL:

<xsl:template match="synonyme"> 
    <xsl:element name="corr"> 
     <xsl:value-of select="@connecteur" /> 
     <xsl:value-of select="/liste/connecteur[@[email protected]]/forme[1]" /> 
    </xsl:element> 
</xsl:template> 

Я просто совпадающий с именем тега synonyme, который имеет атрибут connecteur. Мой код выводит значение этого атрибута.

Я также хочу вывести значение другого узла, который имеет атрибут id, соответствующий атрибуту connecteur текущего совпадающего тега synonyme. Но результаты этого запроса не найдены, второй value-of всегда имеет пустой вывод.

Если я пишу, например. [@id='c160'], где c160 - это то же самое, что выводится первым value-of, он работает! Но не по сравнению с @attribute моего совпадающего узла. Как я могу это исправить?

XML-в основном

<liste><connecteur id="c160"><forme>foo</forme></connecteur> 
     <connecteur id="c161"><synonyme connecteur="c160" /></connecteur> 
</liste> 

и ожидаемый выход вместо synonyme является <corr>c160 foo</corr>.

ответ

1

Предикат вы используете:

[@[email protected]] 

ищет элемент с двумя атрибутами - id и connecteur - с одинаковыми значениями. Для поиска элемента с id атрибута, значение которого совпадает со значением значения текущего элемента connecteur, вам нужно использовать:

[@id=current()/@connecteur] 

См: https://www.w3.org/TR/xslt/#function-current


Лучшим решением было бы определить ключ как:

<xsl:key name="ref" match="connecteur" use="@id" /> 

затем использовать:

<xsl:value-of select="key('ref', @connecteur)/forme" /> 

для решения перекрестных ссылок.

https://www.w3.org/TR/xslt/#key

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