Допустимые имена Val для извлечения на основе шаблона TDE - PullRequest
0 голосов
/ 19 марта 2019

У меня вопрос, как я могу успешно применить шаблон к данным, которые не соответствуют спецификациям 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 и указание шаблону найти буквальное совпадение для заданной последовательности символов в аргументе?

1 Ответ

1 голос
/ 19 марта 2019

Работает ли использование узла ("2015 - Джо") или текста ("2015 - Джо") в качестве первого аргумента для fn: replace ()?

Это должно соответствовать текстовое значение сНаименование объекта "2015 - Joe's"

...