Как выразить строку, содержащую апострофы и кавычки в XPath? - PullRequest
2 голосов
/ 10 августа 2009

Я избавлю вас от деталей, потому что они будут бесполезно сбивать с толку. Короче говоря, я использую XSLT 1.0 для создания документов XSL, я пытаюсь сравнить переменную с литеральной строкой, и эта строка может содержать кавычки и апострофы.

Ради простоты предположим, что этот литерал состоит из двух символов: кавычка, за которой следует апостроф. В действительности это может быть любой текст на самом деле. Есть ли более простой способ сделать это:

<xsl:if test="$var = concat('&quot;', &quot;'&quot;)">

чем это?

<xsl:variable name="str">"'</xsl:variable>
<xsl:if test="$var = $str">

Я проверил Спецификации XPath , и, похоже, нет способа экранировать символы, поэтому следующее не будет работать должным образом:

<xsl:if test="$var = '&quot;&amp;apos;'">

Спасибо!

Ответы [ 2 ]

2 голосов
/ 10 августа 2009

Нет способа сделать это аккуратно в XPath 1.0. В XPath 2.0 вы можете избежать обоих типов кавычек, удвоив.

1 голос
/ 10 августа 2009

& quot;& amp;&(!)apos; - выглядит намного лучше, но что вы хотели получить?

В любом случае: однажды я написал приложение, которое занимается созданием Javascript поверх XSLT. Эту же проблему с огромным количеством & quot;, ... мы решили двумя способами:

  1. Объявить глобальные xsl:param, $q - выглядит короче & quot;
  2. Используйте 'translate' функцию XPath, сделайте предположение '!' - это & quot;, # это & amp; ..
...