xsl中的撇号文本比较

Nan*_*nda 5 xslt apostrophe

我的文字有撇号符号有问题

例如我尝试测试这个带有符号的xml然后我该如何比较?

<xsl:for each select="country[nation='India's]">
Run Code Online (Sandbox Code Playgroud)

这是显示错误的陈述

关心Nanda.A

Tom*_*lak 10

一种方法是:

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

<!-- ... later ... -->

<xsl:for-each select="country[nation=concat('India', $apos, 's')]">
Run Code Online (Sandbox Code Playgroud)

这里的问题有两个:

  • XSLT定义了字符串中没有字符转义的方法.所以'India\'s'不是一个选择.
  • 您必须通过两个不同的评估层.

这些是:

  1. XML格式良好:XSLT程序所包含的XML文档必须格式良好.您不能违反XML规则.
  2. XSLT表达式解析:生成的属性值字符串(在完成XML DOM解析之后)必须对XSLT引擎有意义.

构造如:

<xsl:for-each select="country[nation='India's']">
<xsl:for-each select="country[nation='India&apos;s']">
Run Code Online (Sandbox Code Playgroud)

传递XML层但违反了XSLT层,因为在这两种情况下,有效的属性值(存储在DOM中)都是country[nation='India's'],这显然是一个XPath语法错误.

构造如:

<xsl:for-each select="country[nation=concat('India', "'", 's')]">
<xsl:for-each select="country[nation=concat("India", "&apos;", "s")]">
Run Code Online (Sandbox Code Playgroud)

显然违反了XML层.但是它们不会违反XSLT层(!),因为它们的实际值(如果XSLT文档可以在第一时间被解析)将会出现country[nation=concat('India', "'", 's')],这与XPath表达式完全合法.

所以你必须找到一种方法来通过第1层和第2层.一种方法是如上所示的可变方式.另一种方式是:

<xsl:for-each select="country[nation=concat('India', &quot;'&quot;, 's')]">
Run Code Online (Sandbox Code Playgroud)

这对XSLT来说似乎是country[nation=concat('India', "'", 's')].

就个人而言,我发现"变量方式"更容易使用.