如何逃脱在XSLT子功能单引号(how to escape single quote in xslt

2019-06-18 04:18发布

我试着用串在XSLT单引号的数据:

String : DataFromXML:'12345'

预期结果: 12345

<xsl:value-of select="substring-after('$datafromxml','DataFromXML:')"/>

结果: '12345'

我想下面的代码

<xsl:value-of select="substring-after('$datafromxml','DataFromXML:&#39;')"/>

<xsl:value-of select="substring-after('$datafromxml','DataFromXML:&apos;')"/>

<xsl:value-of select="substring-after('$datafromxml','DataFromXML:'')"/>

错误:

String literal was not closed 'DataFromXML:'--->'<---

Answer 1:

转义的一般规则是:

在1.0:

  • 如果你想在一个字符串属性分隔符文字,使用XML逃逸形式&quot;&apos;
  • 如果你想在字符串中的字符串分隔符文字,你是大清洗

在2.0:

  • 如果你想在一个字符串属性分隔符文字,使用XML逃逸形式&quot;&apos;
  • 如果你想在字符串中的字符串分隔符文字,加倍(例如,“我真是”)

如由维塔利所示的使用一个变量$ QUOT或$者的可以使代码更加清晰。



Answer 2:

这应该工作:

<xsl:variable name="apos">'</xsl:variable>

...

<xsl:value-of select="substring-before(substring-after($datafromxml, concat('DataFromXML:', $apos)), $apos)" />


Answer 3:

你可以尝试换和“和”在你的xsl:value-of的

<xsl:value-of select='substring-before
   (substring-after($datafromxml,"DataFromXML:&apos;"), "&apos;")'/> 

或者,您可以利用转换功能,以消除讨厌的撇号

 <xsl:value-of select='translate
    (substring-after($datafromxml,"DataFromXML:"), "&apos;", "")'/> 

不一定更好,但它确实删除一个变量的需求。



Answer 4:

即使在最复杂的情况下-字符串包含一个引号和撇号-数而无需借助变量来提取

假设我们有这个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(.,"&apos;")
     '/>
==============  
     <xsl:value-of select=
     'substring-before(
       substring-after(substring-after(.,"&apos;"), &apos;&quot;&apos;),
       "&apos;"
                       )
     '/>
 </xsl:template>
</xsl:stylesheet>

其结果是

 "12345' "
==============  
     12345

别注 :我故意有两个XPath表达式-第一个目的是使其更容易理解什么是在第二XPath表达式来表示。 只留下最后xsl:value-of模板体内产生正是通缉的结果:

12345


Answer 5:

只是说明我的未来的自己(或其他人)谁将会从为我工作确切语法的提醒中受益。

声明这个变量

<xsl:variable name="apos" select='"&apos;"'/>

而在这样的条件下使用

<xsl:if test="$value = concat('G-2', $apos, 'd')">89594</xsl:if>


文章来源: how to escape single quote in xslt substring function
标签: xslt xpath