我的问题是我如何才能成功地将模板应用于不符合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并告诉模板查找参数中给定字符序列的文字匹配?
答案 0 :(得分:1)
使用node(“ 2015-Joe's”)或text(“ 2015-Joe's”)作为fn:replace()的第一个参数是否可行?
该文本值应与属性名称为“ 2015-Joe's”的文本值匹配