我尝试在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:'--->'<---
答案 0 :(得分:23)
逃避的一般规则是:
在1.0:
"
或'
在2.0中:
"
或'
使用Vitaliy显示的变量$ quot或$ apos可以使代码更清晰。
答案 1 :(得分:10)
这应该有效:
<xsl:variable name="apos">'</xsl:variable>
...
<xsl:value-of select="substring-before(substring-after($datafromxml, concat('DataFromXML:', $apos)), $apos)" />
答案 2 :(得分:8)
您可以尝试在 xsl:value-of
中交换和“和”<xsl:value-of select='substring-before
(substring-after($datafromxml,"DataFromXML:'"), "'")'/>
或者,您可以使用translate函数删除讨厌的撇号
<xsl:value-of select='translate
(substring-after($datafromxml,"DataFromXML:"), "'", "")'/>
不一定更好,但确实不需要变量。
答案 3 :(得分:4)
即使在最复杂的情况下 - 字符串同时包含引号和撇号 - 可以在不诉诸变量的情况下提取数字。
假设我们有这个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
答案 4 :(得分:0)
只是我未来的自己(或其他任何人)的笔记,他会从提醒我的精确语法中受益。
声明此变量
<xsl:variable name="apos" select='"'"'/>
并在这种情况下使用它
<xsl:if test="$value = concat('G-2', $apos, 'd')">89594</xsl:if>