Я довольно новичок в XSLT и борюсь с реализацией рекурсивного шаблона, который проходит через несколько текстовых узлов и ищет совпадение.При создании рекурсивного шаблона я получаю сообщение об ошибке: «Обязательный тип элемента первого операнда '/' - это node (); предоставленное значение имеет тип элемента xs: string».Я не знаю, как выбрать несколько узлов в качестве узлов вместо строки.
Цель: у меня есть несколько тестовых узлов, таких как
<Chain>1 3 4 7 20 50 72 ...</Chain>
Я хочу перебрать эти узлы, чтобыискать соответствующий номер.Когда это число найдено, мне нужно выбрать подстроку родительского атрибута элемента.
Вот часть таблицы стилей с рекурсивным шаблоном:
<xsl:template match="/l:LandXML/h:HexagonLandXML/h:Point/h:PointCode">
<xsl:variable name="id2" select="../@uniqueID"/>
<xsl:call-template name="tests">
<xsl:with-param name="input" select="/l:LandXML/h:HexagonLandXML/h:PlanFeature/h:CoordGeom/h:Spline/h:Chain"/>
<xsl:with-param name="id" select="$id2"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="tests">
<xsl:param name="id"/>
<xsl:param name="input"/>
<xsl:choose>
<xsl:when test="substring-before($input, ' ') = $id">
<xsl:value-of select="format-number(substring-before(substring-after($input/../@oID, '_'), '_'), '#')"/>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="tests">
<xsl:with-param name="input" select="substring-after($input, ' ')"/>
<xsl:with-param name="id" select="$id"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Для лучшего понимания, полноеXML и XSLT здесь: https://xsltfiddle.liberty -development.net / 94hvTzd / 17
Заранее благодарим за любую помощь.