如何使用xslt输出/显示修改的文本值

时间:2011-03-08 01:47:12

标签: xslt xpath

我需要使用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

<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.当文本字段中有换行符\返回时,用空格替换返回值并显示\输出新字符串。 在case1中,目标函数的梯度不能在起始点计算。

  1. 当有冒号时,用冒号替换它们。 在case2中,无法在起点计算:目标函数的梯度。
  2. 我对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(tuv ....)”。

    我是xslt的新手并且假设对于专家来说这不是一个难题:) 有人可以帮忙吗? 感谢

3 个答案:

答案 0 :(得分:1)

此转化

<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广告案例2的组合):

<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任何'的每个文本节点子项;''用':'替换,任何NL字符替换为';'。

  2. 1normalize-space()is issued on the result of the innermost translate()`这会剥离前导和尾随空格,但是';'字符不被触及 - 这是我们用';'替换NL字符的唯一原因在第1步。

  3. 最后,translate()替换任何';'有空间。

答案 1 :(得分:0)

如果要获取XPath表达式的值,则需要使用<xsl:value-of>元素。

答案 2 :(得分:0)

要将表达式的值写入输出文档,必须使用<xsl:value-of>指令,如:

   <xsl:text><xsl:value-of select="translate(tuv[tuv[@xml:lang='en-us']/seg/text(),';',':')"/></xsl:text>