Вам нужно исправить образец XML:
<map>
<default>
<loadFactor>0.75</loadFactor>
<threshold>12</threshold>
</default>
<int>16</int>
<int>3</int>
<string>uuid</string>
<string>81f182fa-51d0-4790-87c2-912b3e011221</string>
<string>display</string>
<string>Height (cm): 156.0</string>
<string>links</string>
<list>
<org.openmrs.module.webservices.rest.web.Hyperlink>
<rel>self</rel>
<uri>http://b581.site/openmrs/ws/rest/v1/obs/81f182fa-51d0-4790-87c2-912b3e011221</uri>
</org.openmrs.module.webservices.rest.web.Hyperlink>
</list>
</map>
Мы можем использовать что-то вроде:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="string[contains(.,'Height')]">
<xsl:copy>
<xsl:value-of select="concat('Height (in): ',round(10 * substring-after(.,': ') div 2.54) div 10)"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
РЕДАКТИРОВАТЬ: ".0 удалено", "//" удалено .
Вывод: Высота (дюйм): 61,4 | Тест: http://xsltransform.net/eiouzmi/6
W3Schools - хорошее место для начала.
РЕДАКТИРОВАТЬ 2: Другое выражение XPath 1.0 для округления преобразованного значения (безобразно):
concat(floor(substring-after(//string[contains(.,'Height')],': ') div 2.54),'.',substring(substring(substring-after(substring-after(//string[contains(.,'Height')],': ') div 2.54,'.'),1,1)+translate(substring(substring-after(substring-after(//string[contains(.,'Height')],': ') div 2.54,'.'),2,1),'123456789','000001111'),string-length(substring(substring-after(substring-after(//string[contains(.,'Height')],': ') div 2.54,'.'),1,1)+translate(substring(substring-after(substring-after(//string[contains(.,'Height')],': ') div 2.54,'.'),2,1),'123456789','000001111')),1))
Выход: 61,4