У меня есть такой узел:
<foo my:first="yes" my:second="no">text</foo>
Мне нужен запрос XPath или функция XSLT, которая выбирает каждый узел с атрибутами в пространстве имен «my». Но если элемент имеет несколько атрибутов "my", элемент должен быть выбран несколько раз.
В настоящее время у меня есть это:
<xsl:template match="//*[@my:*]">
<bar>
<xsl:variable name="attributeName" select="local-name(./@my:*)" />
<xsl:variable name="attributeValue" select="./@my:*" />
<xsl:attribute name="name">
<xsl:value-of select="$attributeName" />
</xsl:attribute>
<xsl:attribute name="value">
<xsl:value-of select="$attributeValue" />
</xsl:attribute>
<xsl:value-of select="." />
<bar>
</xsl:template>
И, естественно, он поддерживает только одиночные атрибуты "my", что приводит к преобразованию, подобному этому:
<bar name="attr_in_my_namespace" value="value_of_that_attr">text</bar>
Если я попробую это с узлом, который я представил в начале, я получу следующую ошибку:
A sequence of more than one item is not allowed as the first argument of
local-name() (@my:first, @my:second)
Итак, ожидаемый результат будет:
<bar name="first" value="yes">text</bar>
<bar name="second" value="no">text</bar>
Как мне этого добиться?