XSL中的撇号文本比较

5

我遇到了一个带有撇号符号的文本问题

例如,我试图测试这个包含该符号的XML,那么如何进行比较呢?

<xsl:for each select="country[nation='India's]">

这是显示错误的语句

祝好, Nanda.A


2
@Nanda:你已经提出了很多问题,并且已经得到了所有问题的答案,但是你没有投票或接受任何答案。请检查一下是否可以接受你迄今为止收到的一些答案。这会回报那些在解决你的问题上投入时间的人们。 - Tomalak
@Nanda:这也有助于未来搜索类似问题并遇到此问题的用户 - 它告诉他们特定的答案对您有效。 - David Spillett
1个回答

10

其中一种方法是:

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

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

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

这里的问题有两个:

  • 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']">

在 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")]">

显然违反了XML层的规定。但是它们不会违反XSLT层的规定(!),因为它们的实际值(如果能够首先解析XSLT文档)将作为合法的XPath表达式输出:country [nation = concat('India', "'", 's')]

因此,您必须找到一种同时通过第1层和第2层的方法。其中一种方法是使用变量,如上所示。另一种方法是:

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

在XSLT中,可能会出现这样的形式:country[nation=concat('India', "'", 's')]

个人而言,我认为“变量方式”更易于处理。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接