模板驱动提取TDE的有效Val名称

问题描述 投票:0回答:1

我的问题是如何成功地将模板应用于不符合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并告诉模板找到参数中给定字符序列的文字匹配吗?

xml types marklogic
1个回答
1
投票

是否可以使用节点(“2015-Joe's”)或文本(“2015-Joe's”)作为fn:replace()的第一个参数?

这应该与文本值匹配,属性名称为“2015 - Joe's”

© www.soinside.com 2019 - 2024. All rights reserved.