需要在单引号之后提取文本。
E.g:
<div>('show')</div>
变量是这样的:
<xsl:variable name="showName" select="substring-before(substring-after(//x:div, '%28%27'), '%27%29')" />
结果是无,encoding caracters。
我认为不能使用%28%27 和%27%29 。这是对的吗?。
感谢。
答案 0 :(得分:5)
XSLT 1.0 :
只需使用:
<xsl:variable name="vshowName" select=
'substring-before(substring-after(/*, "'"), "'")'/>
这是一个完整的转型:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:variable name="vshowName" select=
'substring-before(substring-after(/*, "'"), "'")'/>
<xsl:template match="/*">
<xsl:value-of select="$vshowName"/>
</xsl:template>
</xsl:stylesheet>
应用于提供的XML文档时:
<div>('show')</div>
产生了想要的正确结果:
show
XSLT 2.0 :
在XSLT 2.0中,可以使用以下两种方法之一:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:variable name="vPattern">
^[^']*'([^']*)'.*$
</xsl:variable>
<xsl:variable name="vshowName1" select="replace(/*, $vPattern, '$1', 'x')"/>
<xsl:variable name="vshowName2" select=
'replace(/*, "^[^']*'([^']*)'.*$", "$1", "x")'/>
<xsl:template match="/*">
<xsl:value-of select="$vshowName2"/>
===============
<xsl:value-of select="$vshowName1"/>
</xsl:template>
</xsl:stylesheet>
当在同一个XML文档(上面)上应用此转换时,对两个XPath表达式的求值都会产生相同的结果:
show
===============
show
请注意:
如果您希望使用单个Xpath表达式(不需要xsl:analyze-string
)来提取/处理所有引号括起来的子字符串(其中包含无限数量)这些子串),见这个答案:
https://stackoverflow.com/a/15402185/36305
最后,使用xsl:analyze-string
:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/*">
<xsl:analyze-string select="." regex="'(.*?)'">
<xsl:matching-substring>
<xsl:sequence select="regex-group(1)"/>
</xsl:matching-substring>
</xsl:analyze-string>
</xsl:template>
</xsl:stylesheet>
对以下XML文档应用此转换时:
<div>('word1', 'word2', 'word3')</div>
产生了正确的结果:
word1 word2 word3
此代码(来自其他答案)错误:
<xsl:analyze-string select="//div" regex="'(.*)'">
<xsl:matching-substring>
<xsl:value-of select="regex-group(1)"/>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
当应用于上述XML文档时,它会生成:
(word1', 'word2', 'word3)
答案 1 :(得分:0)
如果您熟悉regular expression,也可以使用<xsl:analyze-string>
。
在单引号之间提取内容。稍后使用regex-group(1)
)引用内容:
<xsl:analyze-string select="//x:div" regex="'(.*)'">
<xsl:matching-substring>
<xsl:value-of select="regex-group(1)"/>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>