我试着用串在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:
- 如果你想在一个字符串属性分隔符文字,使用XML逃逸形式
"
或'
- 如果你想在字符串中的字符串分隔符文字,你是大清洗
在2.0:
- 如果你想在一个字符串属性分隔符文字,使用XML逃逸形式
"
或'
- 如果你想在字符串中的字符串分隔符文字,加倍(例如,“我真是”)
如由维塔利所示的使用一个变量$ 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>
并希望extruct只是数量。
在接下来的转型,我们使用一个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>