XSLT: Как округлить список с плавающей точкой в ​​атрибуте? - PullRequest
0 голосов
/ 17 октября 2018

У меня есть следующий входной 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), но я не совсем понимаю, как их смешать, чтобы получить то, что я хочу.

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Я не смог проверить это (так как у меня нет XSLT-процессора, который поддерживает строки EXSLT), но теоретически, если 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>
0 голосов
/ 17 октября 2018
<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...