XML ...
<BaseElement>
<AttributeList
>ThreadId=1,ThreadName=Foo,ApplicationName=Bar</AttributeList>
</BaseElement>
我正在尝试在ThreadId
...
<xsl:apply-templates select="AttributesList"/>
以上显示整个列表; ThreadId=1,ThreadName=Foo, ...
查看子字符串,但在本质上看起来相当固定。它需要动态,以便如果键(在这种情况下为ThreadId
更改为NewFangledThreadId
,它将继续运行。
答案 0 :(得分:2)
此转换已完全参数化且通用:
<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
答案 1 :(得分:1)
以下样式表:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="AttributeList">
<xsl:value-of select="substring-before(substring-after(., '='), ',')"/>
</xsl:template>
</xsl:stylesheet>
输出:
1
选择第一个=
之后和第一个,
之前的字符串部分。