如何逃脱在XSLT子功能单引号

问题描述 投票:24回答:5

我试着用串在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:'--->'<---
xslt xpath
5个回答
24
投票

转义的一般规则是:

在1.0:

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

在2.0:

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

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


11
投票

这应该工作:

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

...

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

8
投票

你可以尝试换和“和”在你的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;", "")'/> 

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


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(.,"&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

0
投票

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

声明这个变量

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

而在这样的条件下使用

<xsl:if test="$value = concat('G-2', $apos, 'd')">89594</xsl:if>
© www.soinside.com 2019 - 2024. All rights reserved.