Не совсем понятно, что вы ищете, так как ваше описание проблемы и желаемый результат не связаны между собой. Я думаю , что вам нужно найти каждый binding
элемент с uri
дочерним элементом, найти связанный binding
элемент с literal
дочерним элементом и использовать uri
и literal
значений для заполнения элемента a
.
В этом шаблоне предполагается, что два элемента binding
связаны, потому что атрибут name
для объекта с дочерним элементом uri
начинается с атрибута name
для элемента с дочерним элементом literal
, например, «PropertyURI» начинается с «Property», а «ValueURI» начинается с «Value»:
<xsl:template match="binding[uri]">
<xsl:variable name="name" value="@name"/>
<xsl:variable name="literal"
select="/result/binding[starts-with($name, @name)]/literal"/>
<xsl:if test="$literal">
<a href="{uri}">
<xsl:value-of select="$literal"/>
</a>
</xsl:if>
</xsl:template>
Если связанный элемент является просто элементом next binding
после элемента с дочерним элементом uri
, используйте указанный выше шаблон, заменив присвоение переменной на:
<xsl:variable name="literal" select="following-sibling::binding[1]/literal"/>