Добавление отступа XSL/XPath

Сложные приложения, разработанные с использованием реагирующих, vue, angular или других основанных на javascript инфраструктур, имеют ту же проблему или требование, что и серверные приложения (java, nodejs, python и т. Д.): Как читать конфигурации?

[ 1137] Здесь я перечислю некоторые подходы к работе с конфигурациями для фреймворков javascritpt, от простых до управляемых решений. Некоторые из них используются для серверных приложений.

# 1 Глобальные переменные

Поскольку мы говорим об инфраструктурах JavaScript, просто создайте глобальную переменную при запуске вашего приложения, и это будет доступно для всех ваших сценариев:


  
This is title
Hello world

Конечно, запрограммированный URL в исходном коде не вариант, но следует понимать, что это точка входа в следующие подходы. Почти все они основаны на этом подходе или делают что-то подобное.

# 2 Webpack

Webpack предоставляет нам несколько механизмов, таких как DefinePlugin

new webpack.DefinePlugin({
  API_BASE_URL: JSON.stringify(process.env.API_BASE_URL)
})

DefinePlugin является прямым текстом замена . Webpack найдет идентификатор и заменит его на заданную строку. Следующий пример иллюстрирует, как это работает.

Вы можете использовать эту переменную, как если бы она была глобальной переменной:

$.ajax({
    type: "GET",
    url: API_BASE_URL+'/odds?date=2019-01-19',
    dataType: 'json',
    success: function (data) {
      ...
    }
  });
}

Вот больше механизмов веб-пакета: https://stackoverflow.com/a/40416826/3957754 [ 1143]

Преимущества: - Простой способ установить или определить несколько переменных и использовать их во всем приложении. - Используя CI-сервер, такой как jenkins, вы можете установить все свои конфигурации и построить свой артефакт, а затем развернуть его:

export API_BASE_URL=http://awesome.api.com
export ENDPOINT_DETAIL=/detail
export ENDPOINT_FAVOURITE=/favourite
export MODULES=user,guest,admin,configure

npm run build

Недостатки

  • Переменные вводятся на этапе сборки. Изменения в ваших конфигурациях потребуют новой сборки и повторного развертывания вашего приложения.

# 3 Свойства из SCM, базы данных или файловой системы

Проверьте этот ответ:

# 4 Централизованная и управляемая конфигурация

Основная идея заключается в том, чтобы поместить все ваши конфигурации, настройки или свойства в один сайт, и все ваши приложения должны получить эти значения в безопасный способ. В настоящее время наиболее распространенным методом получения этой конфигурации из конечного приложения является выполнение http-запроса к API-интерфейсу, опубликованному платформой.

Такие платформы являются идеальными партнерами для микросервисной архитектуры. Также я смог использовать его для микро-интерфейсов.

Вот несколько платформ:

  • zookeeper
  • Spring Cloud
    • [119 ] https://www.baeldung.com/spring-cloud-configuration
    • Это функциональность фреймворка Java Spring, в которой вы можете создавать файл свойств с конфигурациями и настраивать приложения для их чтения. [ 1186]
  • magi-properties-management
    • Это веб-система java, в которой вы можете создавать среды и любые значения key: value в каждой из них. Вам просто нужно настроить приложение на любом языке, чтобы прочитать эти значения.
  • cyber-properties-management
    • Это приложение nodejs, которое позволяет хранить файлы свойств (.properties .yml или .json) а затем просто использовать их как конечную точку отдыха из ваших приложений.

Вы можете использовать одну из этих платформ в сочетании с подходом webpack. Поэтому вместо ручного экспорта переменных среды вы можете использовать остальные API на этапе сборки в веб-пакете или на вашем сервере C.I, например, на jenkins.

Преимущества

  • Все комментарии выше.

Недостатки

  • Экспорт уникального файла свойств или экспорт среды вручную можно легко и быстро настроить по сравнению с выполнением на другом сервере, отличном от приложения. [ 1132]

# 5 / settings in your web

Если предположить, что ваша сеть обслуживается по адресу http://myapp.com , вы можете опубликовать другую конечную точку, такую ​​как http : //myapp.com/settings . Эта конечная точка вернет все настройки, требуемые вашим микро-интерфейсом или веб-приложением на СТОРОНА КЛИЕНТА с использованием AJAX .

В вашем приложении javascript, в точке входа (обычно это App.js в реакции, vue и т. Д.), Я имею в виду, что перед механизмами рендеринга вы можете использовать http://myapp.com / settings и выставить как глобальные переменные для вашего приложения. Вы также можете сохранить его в одном из доступных хранилищ, таких как localStorage, sessionStorage и т. Д.

Преимущества

  • Изменения в ваших конфигурациях готовы к использованию без перестроения приложение. Просто выполните обновление страницы, чтобы снова выполнить точку входа в вашем javascript.
  • Вы можете использовать подход № 3 в бэкэнд-контроллере ваших / настроек

Недостатки

  • Пред жестко закодированные переменные загружаются мгновенно по сравнению с HTTP-запросом ajax.

6
задан cddr 14 January 2009 в 17:29
поделиться

4 ответа

Иногда более длинного xpath нельзя избежать даже при использовании шаблонов вместо для - eaches (как Вы, должен, если Вы можете). Это особенно верно в XSLT/XPath 2.0:

<xsl:attribute name="tablevel" 
     select="if (following::*[self::topic | self::part]) 
             then (following::*[self::topic | self::part])[1]/@tablevel
             else @tablevel"/>

Я склонен не повреждать "простой" путь через строки, но буду повреждать "больший" путь в операторах или условных выражениях.

Для редактирования я использую Кислород (который является межплатформенным), и это обрабатывает этот вид интервала вполне прилично. Иногда это не предсказывает то, что Вы хотите точно, но это поддержит пространство, после того как это там, даже если Вы повторно располагаете свой код с отступом.

1
ответ дан 17 December 2019 в 07:09
поделиться

По-моему, длинные xpaths трудно считать и должны избежаться. Существует 2 способа сделать это:

  1. Упростите источник xml.
  2. Разделите большие шаблоны на меньшие.
1
ответ дан 17 December 2019 в 07:09
поделиться

Не используйте длинный xpaths. Угробьте для - каждый и используйте шаблоны соответствия. Сломайте xpath в несколько шаблонов. Намного легче считать набор тривиальных шаблонов соответствия, чем один из них.

1
ответ дан 17 December 2019 в 07:09
поделиться

Я склонен ломать XSL по-другому, если я испытываю затруднения при чтении xpath операторов (который не является очень часто, но это иногда происходит)... это на самом деле довольно подобно моим методам разбивания синтаксиса для других языков... Таким образом, Ваш пример в вопросе мог бы стать чем-то больше как это:

<xsl:for-each select="/some/very[@test = 'whatever']/long">
  <xsl:if test="@another-test = perhaps/another/long/xpath[@goes='here']">
    <xsl:for-each select="xpath">
      ... result xml ....
    </xsl:for-each>
  </xsl:if>
</xsl:for-each>
1
ответ дан 17 December 2019 в 07:09
поделиться
Другие вопросы по тегам:

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