Использование подстроки с XQUERY - PullRequest
0 голосов
/ 29 февраля 2020

У меня есть несколько узлов с датой стиля: 2019-11-16

Я хочу получить месяц дат тезисов, пока я пробовал это и некоторые варианты этого:

let $DATE:=data(//activity/DATE)
let $month:=substring($DATE, 6, 2)
return $month

Но у меня есть ошибка, говорящая о том, что количество элементов не соответствует ожидаемому параметру, я знаю, что это проблема, связанная со строками, если я вставлю вручную дату, такую ​​как '1999-12-24', она вернет ожидаемое значение но мне нужно, чтобы прочитать даты, а затем вернуть их, как указано в подстроке, какие-нибудь идеи? Я думал, что данные ("...") вернули строку, но, похоже, это не

1 Ответ

1 голос
/ 29 февраля 2020

Наиболее вероятная причина в том, что путь //activity/DATE выбирает более одного элемента, вам нужно будет проверить это и, если это так, решить, хотите ли вы выбрать только первый, с помощью (//activity/DATE)[1] или head(//activity/DATE), затем вы безусловно, можно вызвать substring для этого выбранного элемента, даже без использования функции data.

Если вы хотите извлечь последовательность номеров месяцев из последовательности DATE элементов, вы можете использовать //activity/DATE/substring(., 6, 2).

Обратите внимание, что ваш формат соответствует типу данных xs:date поэтому использование //activity/DATE/xs:date(.) кажется более подходящим для работы с датами, и тогда вы можете использовать функции в xs:date, //activity/DATE/month-from-date(xs:date(.)): https://www.w3.org/TR/xpath-functions/#func -month-from-date .

...