Можно ли добавить сокращения в < xsl: key use = & ldquo; & rdquo; & gt ;?

У меня такая же проблема для управления настройками учетной записи, как и пары значений имени. Критерии проектирования - это то, что разные клиенты могут иметь разные наборы настроек.

Мое решение, подобно JWP, состоит в том, чтобы объединить стирание и замену, создавая запись слияния в вашем приложении.

Это довольно пуленепробиваемая, независимая от платформы и поскольку на клиента не более 20 настроек, это всего лишь 3 довольно низкого уровня загрузки db-вызовов - возможно, самый быстрый метод.

Альтернатива обновления отдельных строк - проверка исключений то вставка - или некоторая комбинация отвратительного кода, медленная и часто ломающаяся, потому что (как упоминалось выше) нестандартная обработка исключений SQL, изменяющаяся с db на db - или даже релиз для выпуска.

 #This is pseudo-code - within the application:
 BEGIN TRANSACTION - get transaction lock
 SELECT all current name value pairs where id = $id into a hash record
 create a merge record from the current and update record
  (set intersection where shared keys in new win, and empty values in new are deleted).
 DELETE all name value pairs where id = $id
 COPY/INSERT merged records 
 END TRANSACTION
0
задан Szczepan 25 March 2019 в 09:31
поделиться

1 ответ

В XSLT 1.0 вы можете использовать технику, называемую методом Оливера Беккера , что означает написание use в этой форме

concat(
  substring(Str1,1 div Cond),
  substring(Str2,1 div not(Cond))
) 

Итак, в вашем случае вы могли бы напишите свой xsl:key так:

<xsl:key name="item2" match="SHOPITEM" use="concat(
        substring(substring-before(PRODUCT, ' SIZE.'), 1 div (contains(PRODUCT, ' SIZE.'))),
        substring(PRODUCT, 1 div (not(contains(PRODUCT, ' SIZE.'))))
    )" />

Считаете ли вы, что это читабельно, - другой вопрос.

Однако, в этом конкретном случае, для логики, которую вы пытаетесь реализовать, вы также можете написать ключ следующим образом:

 <xsl:key name="item" match="SHOPITEM" use="substring-before(concat(PRODUCT, ' SIZE.'), ' SIZE.')" />

Итак, если PRODUCT содержит SIZE., он будет найти текст до первого появления. Если нет, то будут объединенные SIZE., которые эффективно получат всю строку

См. Примеры в действии на http://xsltfiddle.liberty-development.net/jyRYYij

0
ответ дан Tim C 25 March 2019 в 09:31
поделиться
Другие вопросы по тегам:

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