XSL Замена символов () - PullRequest
       1

XSL Замена символов ()

4 голосов
/ 27 октября 2011

У меня есть узел с некоторыми данными:

<something>Blah blah (Hello World) hihi</something>

Когда я выполняю XSLt, я пытаюсь избежать открывающих и закрывающих скобок и не могу до конца жизни понять, как достичь этого, я пытаюсь что-то вроде этого.

<xsl:variable name="rb">(</xsl:variable>
<xsl:message><xsl:value-of select="replace(something, $rb, concat('\\', $rb))" /</xsl:message>

Это ошибка, которую я получаю, используя Saxon:

Ошибка в xsl: шаблон в строке 728 столбца 34 что-то.xml: FORX0002: ошибка в символе 1 в регулярном выражении "(": ожидается ())

Ответы [ 3 ]

2 голосов
/ 27 октября 2011

Это работает с AltovaXML20011 (XML-SPY) :

<xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>  
 <xsl:template match="/">
  <xsl:sequence select="replace(replace(., '\(', '\\(' ), '\)', '\\)' )"/>
 </xsl:template>
</xsl:stylesheet>

при применении к предоставленному документу XML :

<something>Blah blah (Hello World) hihi</something>

желаемый результат получен :

Blah blah \(Hello World\) hihi
2 голосов
/ 27 октября 2011
<xsl:variable name='string'>Blah blah (Hello World) hihi</xsl:variable>

<xsl:message>
  <xsl:value-of select="replace($string, '(\(|\))','\\$1')" />
</xsl:message>

Это будет работать для любой скобки. Ваш код также неполный. Что то? Содержит ли это значение, которое вы ожидаете? Вам не хватает символа> в конце xsl: value-of.

РЕДАКТИРОВАТЬ: После комментария @ Dimitre:

<xsl:variable name="rb">(</xsl:variable>
<xsl:variable name='string'>Blah blah (Hello World) hihi</xsl:variable>

<xsl:message>
  <xsl:value-of select="replace($string, concat('\', $rb), concat('\\', $rb))" />
</xsl:message>

Выше были бы результаты, которые вы первоначально хотели, хотя я не вижу причин, чтобы предпочесть это по сравнению с моим исходным решением.

0 голосов
/ 07 мая 2018
<xsl:template match="text">
       <xsl:variable name="tex" select="' blabla ? blabl ?  abla ?  '"/>
       <xsl:element name="text">
           <xsl:value-of select="replace($tex,'\?','.')"/>
       </xsl:element>
   </xsl:template>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...