我需要使用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中,目标函数的梯度不能在起始点计算。
我对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的新手并且假设对于专家来说这不是一个难题:) 有人可以帮忙吗? 感谢
答案 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(.,'
;', ';:')),
';', ' '
)
"/>
</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 "
<强>解释强>:
在最里面的翻译中,seg
任何'的每个文本节点子项;''用':'替换,任何NL字符替换为';'。
1normalize-space()is issued on the result of the innermost
translate()`这会剥离前导和尾随空格,但是';'字符不被触及 - 这是我们用';'替换NL字符的唯一原因在第1步。
最后,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>