XSLT Экранирующие персонажи - PullRequest
1 голос
/ 22 сентября 2010

У меня есть следующий фрагмент в XSLT. Есть ли способ переписать его без экранирования символов < и > эквивалентом ASCII?

<coord>
...
<xsl:with-param name="substringIn" select="'' ''"/>
<xsl:with-param 
  name="substringOut" 
  select="'&#60;/coord&#62;&#60;coord&#62;'" 
/> 
...
</coord>

У меня есть строка чисел, разделенных пробелами, например

<value>1 2 3 4 5 6 7</value> 

и я хотел бы преобразовать каждый из них в теги XML, например:

<coord>1</coord>
<coord>2</coord>
<coord>3</coord>
<coord>4</coord>
<coord>5</coord>
<coord>6</coord>
<coord>7</coord>

Мой код выше делает это, но я не хочу использовать escape-символы ASCII.

Ответы [ 2 ]

3 голосов
/ 22 сентября 2010

XSLT-способ разделения строки и упаковки составляющих в элементах таков: :

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="text()" name="split">
  <xsl:param name="pText" select="."/>

  <xsl:choose>
   <xsl:when test="not(contains($pText, ' '))">
    <coord><xsl:value-of select="$pText"/></coord>
   </xsl:when>
   <xsl:otherwise>
    <coord>
     <xsl:value-of select="substring-before($pText, ' ')"/>
    </coord>

    <xsl:call-template name="split">
     <xsl:with-param name="pText" select="substring-after($pText, ' ')"/>
    </xsl:call-template>
   </xsl:otherwise>
  </xsl:choose>
 </xsl:template>
 </xsl:stylesheet>

когда это преобразование применяется к этому документу XML :

<t>1 2 3 4 5 6 7</t>

желаемый, правильный результат получается :

<coord>1</coord>
<coord>2</coord>
<coord>3</coord>
<coord>4</coord>
<coord>5</coord>
<coord>6</coord>
<coord>7</coord>
1 голос
/ 27 сентября 2010

Вы можете использовать раздел CDATA:

<xsl:with-param name="substringOut"><![CDATA[</coord><coord>]]></xsl:with-param>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...