Чтобы получить работающие пути типа
/Request/Payload/root/req1[2]=singh
/Request/Payload/root/req1[1]=pradeep
, вы можете добавить шаблон
<xsl:template match=".[contains(., '[') and contains(., '=')]" mode="step">
<xsl:if test="position() gt 1">/</xsl:if>
<xsl:sequence select="'*[@key = ''' || substring-before(., '[') || ''']/*[' || replace(., '^[^\[]+\[([0-9]+)\].*$', '$1') || ']'"/>
</xsl:template>
, чтобы генерировался код типа
<xsl:template match="*[@key = 'Request']/*[@key = 'Payload']/*[@key = 'root']/*[@key = 'req1']/*[1]">
<xsl:copy>
<xsl:copy-of select="@*"/>pradeep</xsl:copy>
</xsl:template>
<xsl:template match="*[@key = 'Request']/*[@key = 'Payload']/*[@key = 'root']/*[@key = 'req1']/*[2]">
<xsl:copy>
<xsl:copy-of select="@*"/>singh</xsl:copy>
</xsl:template>
, см. https://xsltfiddle.liberty -development.net / bdxtpY / 1 .
В настоящее время я не уверен, как из /Request/Payload/root/req2=suman
сделать вывод о том, что задействован элемент массива.