模板驱动提取TDE

时间:2019-03-19 17:22:09

标签: xml types marklogic

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

1 个答案:

答案 0 :(得分:1)

使用node(“ 2015-Joe's”)或text(“ 2015-Joe's”)作为fn:replace()的第一个参数是否可行?

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