我试着用串在XSLT单引号的数据:
String : DataFromXML:'12345'
预期结果:12345
<xsl:value-of select="substring-after('$datafromxml','DataFromXML:')"/>
结果:'12345'
我想下面的代码
<xsl:value-of select="substring-after('$datafromxml','DataFromXML:'')"/>
<xsl:value-of select="substring-after('$datafromxml','DataFromXML:'')"/>
<xsl:value-of select="substring-after('$datafromxml','DataFromXML:'')"/>
错误:
String literal was not closed 'DataFromXML:'--->'<---
转义的一般规则是:
在1.0:
"
或'
在2.0:
"
或'
如由维塔利所示的使用一个变量$ QUOT或$者的可以使代码更加清晰。
这应该工作:
<xsl:variable name="apos">'</xsl:variable>
...
<xsl:value-of select="substring-before(substring-after($datafromxml, concat('DataFromXML:', $apos)), $apos)" />
你可以尝试换和“和”在你的xsl:value-of的
<xsl:value-of select='substring-before
(substring-after($datafromxml,"DataFromXML:'"), "'")'/>
或者,您可以利用转换功能,以消除讨厌的撇号
<xsl:value-of select='translate
(substring-after($datafromxml,"DataFromXML:"), "'", "")'/>
不一定更好,但它确实删除一个变量的需求。
即使在最复杂的情况下 - 字符串包含一个引号和撇号 - 数而无需借助变量来提取。
假设我们有这个XML文档:
<t>' "12345' "</t>
并希望只提取数量。
在接下来的转型,我们使用一个XPath表达式来做到这些:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="text()">
<xsl:value-of select=
'substring-after(.,"'")
'/>
==============
<xsl:value-of select=
'substring-before(
substring-after(substring-after(.,"'"), '"'),
"'"
)
'/>
</xsl:template>
</xsl:stylesheet>
其结果是:
"12345' "
==============
12345
别注:我故意有两个XPath表达式 - 第一个目的是使其更容易理解什么是在第二XPath表达式来表示。在模板体内只留下最后xsl:value-of
产生完全通缉的结果:
12345
只是说明我的未来的自己(或其他人)谁将会从为我工作的确切语法的提醒中受益。
声明这个变量
<xsl:variable name="apos" select='"'"'/>
而在这样的条件下使用
<xsl:if test="$value = concat('G-2', $apos, 'd')">89594</xsl:if>