У меня вопрос, как я могу успешно применить шаблон к данным, которые не соответствуют спецификациям 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)
ошибку. Я полагаю, что это потому, что имя поля начинается с цифры и содержит символ «», что нарушает спецификацию XML здесь .
Следовательно, я попытался обернуть ссылку на элемент "":
<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 и указание шаблону найти буквальное совпадение для заданной последовательности символов в аргументе?