在XSL选择路径中包含变量值不起作用

问题描述 投票:0回答:1

我对此不太了解。

所以我有这个外部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"/>

以上将摘录英文译本。这就是问题,在我的主要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节点?有道理吗?

xml xslt-1.0
1个回答
0
投票
<xsl:value-of select="$Translations/msa:Translations/msa:*[local-name() = $LangCode]/msa:ServiceTalk"/>
© www.soinside.com 2019 - 2024. All rights reserved.