xsl中的撇号文本比较

时间:2010-03-19 16:02:55

标签: xslt apostrophe

我的文字有撇号符号

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

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

这是显示错误的声明

此致 Nanda.A

1 个答案:

答案 0 :(得分: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引擎有意义。
  3. 构造如:

    <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文档可以在第一时间解析)将显示为{{1这是完全合法的XPath表达式。

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

    country[nation=concat('India', "'", 's')]

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

    就个人而言,我发现“变量方式”更容易使用。