我有以下输入xml节点:
<text bbox="143.430,683.264,147.982,695.231">foo</text>
我想拥有的是:
<span class="ocrx_word" title="bbox 143 683 148 695">foo</span>
到目前为止,我可以将逗号更改为空格和属性名称,如下所示:
<xsl:template match="text">
<xsl:variable name="bbox" select="translate(@bbox, ',', ' ')" />
<span class='ocrx_word' title="bbox {$bbox}">
<xsl:value-of select="."/>
</span>
</xsl:template>
我看到有round()
和str:split()
(来自EXSLT)函数,但我不太了解如何将它们混合在一起以得到所需的内容。
答案 0 :(得分:1)
我无法对此进行测试(因为我没有支持EXSLT字符串的XSLT处理器),但是从理论上讲,如果lxml
可以这样做,则您想要执行此操作。 ..
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:str="http://exslt.org/strings"
version="1.0">
<xsl:output method="xml" indent="yes" />
<xsl:template match="text">
<xsl:variable name="bbox" select="str:tokenize(@bbox, ',')" />
<span class="ocrx_word">
<xsl:attribute name="title">
<xsl:for-each select="str:tokenize(@bbox, ',')">
<xsl:if test="position() > 1"> </xsl:if>
<xsl:value-of select="round(number(.))" />
</xsl:for-each>
</xsl:attribute>
<xsl:value-of select="."/>
</span>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
<xsl:template match="text">
<xsl:variable name="bbox" select="for $i in tokenize(@bbox,',')
return floor(number($i))" />
<span class='ocrx_word' title="bbox {$bbox}">
<xsl:value-of select="."/>
</span>
</xsl:template>