<em>2017-03-10+08:00</em>
//em -> 2017-03-10+08:00
//em/codepoint-equal(., '2017-03-10+08:00') -> true
//em/codepoint-equal(., '') -> false
//em/codepoint-equal(., current-date()) -> ERROR!
如何在最后一种情况下修复错误?
答案 0 :(得分:1)
要避免上一种情况下的类型不匹配错误,请在current-date()
中包裹string()
,
//em/codepoint-equal(., string(current-date()))
以便xs:date
按预期xs:string
显式转换为codepoint-equal()
。
是否需要进行明确的类型转换?
根据XPath 2.0 function conversion rules,
如果在上述转换后,结果值与SequenceType Matching的规则不符合预期类型,则type error会被引发 [err:XPTY0004]。请注意,SequenceType Matching的规则允许派生类型的值替换其基类型的值。
请注意使用 permit 这个词而不是 require 。也许在上一种情况下产生错误的XPath库将函数转换规则解释为允许但不要求从xs:date
转换为xs:string
。