Это преобразование полностью параметризовано и является общим :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:param name="pAttrName" select="'AttributeList'"/>
<xsl:param name="pKeyName" select="'ThreadId'"/>
<xsl:template match="/">
<xsl:value-of select=
"substring-before(
substring-after(concat(',',
/*/*[name()=$pAttrName],
','
),
concat(',', $pKeyName, '=')
),
','
)
"/>
</xsl:template>
</xsl:stylesheet>
при применении к предоставленному документу XML :
<BaseElement>
<AttributeList
>ThreadId=1,ThreadName=Foo,ApplicationName=Bar</AttributeList>
</BaseElement>
желаемый, правильный результат получается:
1
Когда мы просто указываем :
<xsl:param name="pKeyName" select="'ApplicationName'"/>
снова правильный результатпроизводится :
Bar