我的问题是如何成功地将模板应用于不符合XML规范的数据。我有元素名称的传入数据,值如下:
使用fn:doc($ uri)检索的示例文档:
{
"ID": "208455",
"Type": "Deductions",
"MONTH": "1",
"2015 - Joe's": "14.10%",
}
我想用TDE操作的部分是:
“2015 - 乔的”:“14.10%”
值本身就是一个字符串。
我想使用TDE模板将值转换为十进制,例如删除“%”。这在查询控制台中执行时有效:
let $s1:= "14.10%"
return fn:number(fn:replace($s1, "[^0-9.]", ""))
###
14.1 (float)
但是在模板中执行相同的链接函数时:
<column>
<name>value_2015</name>
<scalar-type>string</scalar-type>
<val>fn:number(fn:replace(2015 - Joe's, "[^0-9.], ""))</val>
<nullable>true</nullable>
</column>
我收到Compile for Column value_2015='fn:replace(2015 - Joe's, "[^0-9.], "")' returns XDMP-BADCHAR: (err:XPST0003) Unexpected character found ''' (0x0027)
错误。我相信这是因为字段名称以数字开头并包含一个“'”字符,违反了the XML specification over here。
因此,我尝试用“”包装元素引用:
<column>
<name>value_2015</name>
<scalar-type>string</scalar-type>
<val>fn:replace("2015 - Joe's", "[^0-9.], "")</val>
<nullable>true</nullable>
但这当然会返回另一个BADCHAR错误:XDMP-BADCHAR: (err:XPST0003) Unexpected character found '"' (0x0022)
,因为现在我们在元素引用中有引号。
我怎么能解决这个问题呢?如果我不能引用元素,我将如何用有效的XML元素名称替换它们?我有任何喜欢的选项,转义XML并告诉模板找到参数中给定字符序列的文字匹配吗?
是否可以使用节点(“2015-Joe's”)或文本(“2015-Joe's”)作为fn:replace()的第一个参数?
这应该与文本值匹配,属性名称为“2015 - Joe's”