текстовое сравнение апострофа в xsl

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

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

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

это - ошибка показа оператора

Отношения Nanda. A

5
задан kennytm 19 March 2010 в 16:08
поделиться

1 ответ

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

<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 будет выглядеть как страна[nation=concat('India', "'", 's')].

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

10
ответ дан 13 December 2019 в 22:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: