Получите имя файла с помощью xsl

Вы используете тип хеша для хранения отдельной информации, и вы используете hgetall для ее получения, поэтому я предполагаю, что вы еще не знакомы с типами данных redis. Итак, сначала позвольте мне кратко объяснить три типа данных, о которых я буду говорить (все типы можно найти в документации здесь https://redis.io/topics/data-types-intro ):

  • Строка: простой тип ключ / значение, доступ к нему осуществляется с помощью set(key, value) и get(key, value)
  • Хэш: это набор ключей / значений, хранящихся под одним ключом redis. Полезно для хранения атрибутов объекта, например, вы можете иметь ключ userdata: userID и имя магазина, аватар, статус ... вместе с ним. Доступ к нему с помощью hset(key, field, value), hget(key, field), hgetall(key)
  • Набор: представляет собой набор уникальных строк, доступ к нему с помощью sadd(key, member), sismember(key, member), smembers(key)

[ 1121] Если вы собираетесь сохранить только онлайн-статус, было бы лучше использовать строковый тип с set, get и del (так как обычно большинство пользователей в автономном режиме большую часть времени, удалите их и сэкономьте место). Для этого простого ключа / значения redis на самом деле даже лучше, чем старый добрый memcache.

Если вы намереваетесь хранить больше пользовательских атрибутов (настроение, девиз, аватар ...), вам следует переименовать его в «userdata: userID», проверить с помощью hget("userdata:userID", "status") и использовать hgetall только для получения всех атрибуты.

Другим подходом может быть сохранение всех пользователей в наборе: sadd('users:online', userID) и проверка с помощью sismember('users:online', userID) или получение всех онлайн-пользователей с помощью smembers('users:online'). Предположим, вы храните всех друзей в другом наборе friends:userID, вы можете захватить всех онлайн-друзей пользователя с помощью одной команды пересечения sinter('friends:userID', 'users:online') - довольно мило и элегантно, IMHO, но это сложно с более различными состояниями и не работает с Redis-кластер.

1124 Я бы предпочел подход SET. Несколько хетгов тоже подойдут, пока не возникнут проблемы из-за одного парня (он всегда один), который имеет тысячи контактов и постоянно обновляется. В этот момент вы все еще можете ввести некоторые ограничения дружбы или кеширования.

14
задан Mathias Müller 19 February 2014 в 14:16
поделиться

2 ответа

Нет такой функции XPath или расширения XSLT функции XPath, чтобы сделать это в XSLT v1/XPath v1.

для там довольно возможно не быть никаким файлом, и даже если нет никакой причины механизма XSLT, чтобы иметь то имя файла (рассмотрите загрузку содержания файла в буфер, парсинг буфера в DOM и затем передачу DOM к процессору XSLT).

необходимо будет передать имя файла в процессор, чтобы быть доступными в качестве параметра в преобразовании.

15
ответ дан 1 December 2019 в 06:24
поделиться

base-uri() стандартная функция XPath 2.0 , поэтому когда рабочий XSLT 1.0 эта функция будет недоступен.

В XSLT 1.0 имя файла (какой?) может быть передан в качестве параметра для преобразования.

Делают примечание , что не всегда возможно произвести имя файла для таблицы стилей или для XML-документа - или или оба могут находиться в памяти без связанного файла.

Это не ясно из проблемы, какое имя файла должно быть произведено.

Вот то, как найти имена файлов в XPath 2.0 / XSLT 2.0:

имя файла текущего документа:

 base-uri()

имя файла текущего модуля таблицы стилей:

  base-uri(document(''))
33
ответ дан 1 December 2019 в 06:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: