- From: <bugzilla@jessica.w3.org>
- Date: Sat, 09 Jul 2016 18:17:31 +0000
- To: public-qt-comments@w3.org
https://www.w3.org/Bugs/Public/show_bug.cgi?id=29727
Bug ID: 29727
Summary: [xslt30ts] aspiring-001
Product: XPath / XQuery / XSLT
Version: Candidate Recommendation
Hardware: PC
OS: All
Status: NEW
Severity: normal
Priority: P2
Component: XSLT 3.0 Test Suite
Assignee: abel.online@xs4all.nl
Reporter: mike@saxonica.com
QA Contact: public-qt-comments@w3.org
Target Milestone: ---
(a) The test file aspiring-001.xsl is referenced as aspiring001.xsl in the test
catalog
(The other test files in the same directory are not referenced at all -
presumably this is work in progress).
(b) On running the test I get
Error at char 22 in xsl:value-of/@select on line 73 column 75 of ncname.xsl:
FOCH0001: codepoints-to-string(): invalid XML character [x14]
It seems that the template rule on line 62 has been called with the input
string
"41-5A"
and that something is wrong with the hex-to-integer conversion. If we look at
the function
<xsl:function name="f:fromHex" as="xs:integer">
<xsl:param name="in" />
<xsl:variable name="val" select="function($v) { if($v ge 65) then $v -
55 else $v - 48 }" />
<xsl:sequence select="sum(reverse(string-to-codepoints($in)) ! ($val(.)
* math:pow(16, position() - 1))) cast as xs:integer" />
</xsl:function>
with $in = "41"
string-to-codepoints($in) = (52, 49)
$val(52) = -4
$val(49) = -6
I can't see the logic here...
I would suggest
<xsl:function name="f:fromHex" as="xs:integer">
<xsl:param name="in" />
<xsl:sequence select="
if (string-length($in) = 0) then 0
else if (string-length($in) = 1)
then string-length(substring-before('012..ef', $in))
else f:fromHex(substring($in,1,1))*16 + f:fromHex(substring($in,2))"/>
</xsl:function>
--
You are receiving this mail because:
You are the QA Contact for the bug.
Received on Saturday, 9 July 2016 18:17:40 UTC