如何在xslt substring函数中转义单引号

but*_*ski 25 xslt xpath

我尝试在XSLT中使用单引号对数据进行子串:

String : DataFromXML:'12345'
Run Code Online (Sandbox Code Playgroud)

预期结果: 12345

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

结果: '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:'')"/>
Run Code Online (Sandbox Code Playgroud)

错误:

String literal was not closed 'DataFromXML:'--->'<---
Run Code Online (Sandbox Code Playgroud)

Mic*_*Kay 24

逃避的一般规则是:

1.0:

  • 如果要在字符串文字中使用属性分隔符,请使用XML转义表单&quot;&apos;
  • 如果你想在字符串文字中使用字符串分隔符,那么你就是软管

在2.0中:

  • 如果要在字符串文字中使用属性分隔符,请使用XML转义表单&quot;&apos;
  • 如果你想在字符串文字中使用字符串分隔符,请将其加倍(例如,'我不能')

使用Vitaliy所示的变量$ quot或$ apos可以使代码更清晰.

  • 我没有任何反对使用变量的东西 - 只是解决了你的语句"如果你想在字符串文字中使用字符串分隔符,那么就是你的".很抱歉试图准确. (5认同)
  • Michael,实际上可以用单个XPath 1.0表达式提取数字,即使在最复杂的情​​况下,当字符串包含引号和撇号时 - 根本不使用任何变量. (3认同)
  • 可能,是的,但只有通过大量使用实体引用才能使代码变得完全不可读.为什么变量如此糟糕呢? - 一个好的处理器将内联它们. (2认同)

Vit*_*liy 11

这应该工作:

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

...

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


Tim*_*m C 8

您可以尝试在xsl:value-of中交换和"和"

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

或者,您可以使用translate函数来删除讨厌的撇号

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

不一定更好,但它确实消除了变量的需要.