我一直在尝试找到一个解决方案来汇总两个或更多**UUID**
个变量(十六进制 XSLT2.0
,
假设我们有例如:
005eb9ed-1347-4ca3-bb29-9bc0db64e1ab
f5276600-a2b6-4ff6-a90e-b31fe19dae41
7d35fb7c-da5b-4830-b598-4f347a04dceb
我想将这些数字相加(视为一个数字)或者让它们将它们转换为数字然后求和它们并再次将结果更改为十六进制。
如何通过 XSLT2.0
实现这一目标?
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:fn="http://www.w3.org/2005/xpath-functions"
xmlns:bin="http://expath.org/ns/binary">
<xsl:function name="f:toInt" as="xs:integer">
<xsl:param name="uuid" as="xs:string"/>
<xsl:variable name="b64Input" as="bin:hex(translate($uuid, '-', ''))"/>
<xsl:sequence select="bin:unpack-unsigned-integer($b64Input, 0, bin:length($b64Input))"/>
</xsl:function>
<xsl:template match="/">
<xsl:value-of select="f:toInt(uuid['7c637c0c-7703-4389-ba52-02997a055bd7']) + f:toInt(uuid['f5276600-a2b6-4ff6-a90e-b31fe19dae41'])"/>
</xsl:template>
</xsl:stylesheet>
使用示例xslt代码更新
答案 0 :(得分:1)
在EXPath二进制库的帮助下,假设一个实现支持足够大小的xs:integer值,你可以将值转换为这样的数字:
<xsl:function name="f:toInt" as="xs:integer">
<xsl:param name="uuid" as="xs:string"/>
<xsl:variable name="b64Input" select="bin:hex(translate($uuid, '-', ''))"/>
<xsl:sequence select="bin:unpack-unsigned-integer(
$b64input, 0, bin:length($b64input))"/>
</xsl:function>
然后添加两个值:
f:toInt(uuid[1]) + f:toInt(uuid[2])