У меня есть проблема с текстом с символом апострофа
пример я пытаюсь протестировать этот xml наличие символа, затем, как я могу выдержать сравнение?
<xsl:for each select="country[nation='India's]">
это - ошибка показа оператора
Отношения Nanda. A
Один из способов сделать это был бы следующим:
<xsl:variable name="apos" select='"'"'/>
<!-- ... later ... -->
<xsl:for-each select="country[nation=concat('India', $apos, 's')]">
Проблема здесь двоякая:
'India\'s'
- не вариант. Это:
Конструкции типа:
<xsl:for-each select="country[nation='India's']">
<xsl:for-each select="country[nation='India'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", "'", "s")]">
явно нарушают уровень XML. Но они не нарушают уровень XSLT (!), поскольку их фактическое значение (если бы документ XSLT вообще можно было разобрать) будет выглядеть как country[nation=concat('India', "'", 's')]
, что совершенно законно как выражение XPath.
Таким образом, вы должны найти способ пройти через уровень 1 и уровень 2. Один из способов - это способ с переменными, как показано выше. Другой способ - это:
<xsl:for-each select="country[nation=concat('India', "'", 's')]">
что в XSLT будет выглядеть как страна[nation=concat('India', "'", 's')]
.
Лично мне проще работать с "способом переменных".