Как вывести / отобразить измененное текстовое значение с помощью xslt - PullRequest
1 голос
/ 08 марта 2011

Мне нужно отобразить измененные тексты, используя xlst.

часть кода.

Вариант 1:

<tu>
<tuv xml:lang="en-us" changedate="20110216T070945Z"> 
<seg>
<ut>#  302 </ut>The gradient of the objective function cannot be
<ph x="1" type="inldel">!      </ph>computed at the starting point</seg>
</tuv>
</tu>

* Вариант 2 1011 *

<tuv xml:lang="zh-cn" changedate="20110216T070945Z"> 
<seg>
<ut>#  302 </ut>The gradient of the; objective function cannot be
<ph x="2" type="inldel">!      </ph>computed at the starting point</seg>
</tuv>

просит: 1. если в текстовом поле есть разрывы \ возвраты, замените возврат пробелами и отобразите \ выведите новую строку. В случае 1, градиент целевой функции не может быть вычислен в начальной точке.

  1. когда есть точки с запятой, замените их на двоеточия. В случае 2, градиент функции: target не может быть вычислен в начальной точке.

Мое текущее решение для case2:

*<xsl:if test="tuv[@xml:lang='en-us']/seg/text()">
<xsl:choose>
   <xsl:when test="contains(tuv[@xml:lang='en-us']/seg/text(),';')">
   <xsl:text>translate(tuv[tuv[@xml:lang='en-us']/seg/text(),';',':')</xsl:text>   </xsl:when>
   <xsl:otherwise> 
   <xsl:apply-templates select="tuv[@xml:lang='en-us']/seg/text()"/>   
</xsl:otherwise>
  </xsl:choose>
</xsl:if>*

Но вывод не показывает возвращенную пустоту функции Translate, вместо этого он отображает "translate (tuv ....)".

Я новичок в xslt и думаю, что это не сложный вопрос для экспертов :) Кто-нибудь может помочь? спасибо

Ответы [ 3 ]

1 голос
/ 08 марта 2011

Это преобразование :

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/*">
  "<xsl:apply-templates select="seg/text()"/>"
 </xsl:template>

 <xsl:template match="seg/text()">
  <xsl:value-of select=
    "translate(normalize-space(translate(.,'&#xA;;', ';:')),
               ';', ' '
               )
    "/>
 </xsl:template>
</xsl:stylesheet>

при применении к этому документу XML (комбинация вашего случая 1 объявление case2):

<tuv xml:lang="zh-cn" changedate="20110216T070945Z">
    <seg>
        <ut>#  302 </ut>The gradient of the; objective function cannot be
        <ph x="2" type="inldel">!      </ph>computed at the starting point
    </seg>
</tuv>

дает требуемый, правильный результат:

  "The gradient of the: objective function cannot be computed at the starting point "

Пояснение :

  1. В самом внутреннем переводе, вкаждый дочерний элемент текстового узла seg any ';'заменяется на «:», а любой символ NL заменяется на «;».

  2. 1normalize-space () is issued on the result of the innermost translate () `, и это удаляет начальный и конечный символыпробел, однако ';'символы не трогаются - это единственная причина, по которой мы заменили символы NL на ';'на шаге 1.

  3. Наконец, translate() заменяет любой ';'с пробелом.

0 голосов
/ 08 марта 2011

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

   <xsl:text><xsl:value-of select="translate(tuv[tuv[@xml:lang='en-us']/seg/text(),';',':')"/></xsl:text>
0 голосов
/ 08 марта 2011

Если вы хотите получить значение выражения XPath, вам нужно использовать элемент <xsl:value-of>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...