апострофное сравнение текста в xsl - PullRequest
5 голосов
/ 19 марта 2010

У меня проблема с текстом с апострофом

пример, который я пытаюсь проверить на этом xml с символом, тогда как мне сравнить?

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

это утверждение, показывающее ошибку

С уважением Nanda.A

1 Ответ

10 голосов
/ 19 марта 2010

Один из способов сделать это будет:

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

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

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

Проблема здесь двоякая:

  • XSLT не определяет способ экранирования символов в строках. Так что 'India\'s' не вариант.
  • Вы должны пройти два разных уровня оценки.

Это:

  1. Правильная XML-форма : XML-документ, из которого состоит ваша XSLT-программа, должен быть правильно сформированным. Вы не можете нарушать правила 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 может быть проанализирован в первую очередь ), будет выглядеть как country[nation=concat('India', "'", 's')], что совершенно законно как выражение XPath.

Таким образом, вы должны найти способ пройти как слой 1, так и слой 2. Один из них - переменный, как показано выше. Другой способ:

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

, который для XSLT выглядит как country[nation=concat('India', "'", 's')].

Лично мне легче работать с "переменным способом".

...