Я не могу полностью разобраться с этим.
Итак, у меня есть этот внешний XML файл данных:
<?xml version="1.0" encoding="UTF-8"?>
<Translations xmlns="http://www.publictalksoftware.co.uk/msa">
<en>
<Chairman>Chairman</Chairman>
<Conductor>Conductor</Conductor>
<Hospitality>Hospitality</Hospitality>
<Prayer>Prayer</Prayer>
<PublicTalk>Public Talk</PublicTalk>
<Reader>Reader</Reader>
<ServiceTalk>Service Talk</ServiceTalk>
<Speaker>Speaker</Speaker>
<Theme>Theme</Theme>
<WTStudy>Watchtower Study</WTStudy>
</en>
</Translations>
На него ссылаются в моем основном сценарии XSL, как это :
<xsl:variable name="Translations" select="document('Workbook-S-140-Compact_2020_v2_Translations.XML')"/>
Я могу извлечь значения из этого XML файла следующим образом:
<xsl:value-of select="$Translations/msa:Translations/msa:en/msa:ServiceTalk"/>
Приведенное выше извлечет перевод Engli sh. Дело в том, что в моем основном файле данных XML вверху есть следующее:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="Workbook-S-140-Compact_2020_v2.xsl"?>
<MeetingWorkBook>
<Settings>
<LanguageCode>en</LanguageCode>
<Direction>ltr</Direction>
<EditorMode>1</EditorMode>
<ForeignGroupMode>0</ForeignGroupMode>
<Now Day="20" Month="2" Year="2020"/>
</Settings>
Обратите внимание на запись LanguageCode
? Я хотел использовать это так, чтобы мое преобразование было основано на коде языка. Поэтому я сначала добавил в свою XSL-файл вторую переменную:
<xsl:variable name="LangCode">
msa:<xsl:value-of select="//Settings//LanguageCode"/>
</xsl:variable>
И изменил свой путь так:
<xsl:value-of select="$Translations/msa:Translations/{$LangCode}/msa:ServiceTalk"/>
Но это не нравится. Я не могу понять, как вставить код языка в запрос пути. У меня много таких строк перевода, поэтому я ищу простое решение, если это возможно.
Я также попытался сохранить переменную как:
<xsl:variable name="LangCode">
<xsl:value-of select="//Settings//LanguageCode"/>
</xsl:variable>
И затем использовать:
<xsl:value-of select="$Translations/msa:Translations/msa:{$LangCode}/msa:ServiceTalk"/>
По-прежнему происходит сбой.
Можно ли настроить эту строку:
<xsl:variable name="Translations" select="document('Workbook-S-140-Compact_2020_v2_Translations.XML')"/>
Так, чтобы $Translations
указывал на узел Translations/langcode
? Имеет смысл?