gpt4 book ai didi

xml - XSLT - 按顺序应用两个不同的模板

转载 作者:行者123 更新时间:2023-12-03 16:01:46 25 4
gpt4 key购买 nike

我有一个这样的 XML 文档:

<parent>
<child>hello world</child>
</parent>

我想应用两种不同的转换:

  • 从“hello world”到“hello guys”(使用替换功能)
  • 从“hello guys”到“HELLO GUYS”(使用翻译功能)

出于这个原因,我的 XSLT 样式表是这样的:

<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>

<!-- First Transformation -->
<xsl:template match="text()" >
<xsl:value-of select="replace(. , 'world', 'guys')"/>
</xsl:template>

<!-- Second Transformation -->
<xsl:template match="text()">
<xsl:value-of select="translate(., 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" />
</xsl:template>

输出是:

<parent>
<child>HELLO WORLD</child>
</parent>

您会注意到我得到的是 HELLO WORLD 而不是 HELLO GUYS...我认为我可以解决这个问题,在翻译函数中添加替换函数。不幸的是,我需要将这两个操作很好地分开(因此我使用了两个不同的模板元素)。我怎样才能做到这一点?

最佳答案

如果你使用一个模式

<!-- First Transformation -->
<xsl:template match="text()">
<xsl:variable name="t1" as="text()">
<xsl:value-of select="replace(. , 'world', 'guys')"/>
</xsl:variable>
<xsl:apply-templates select="$t1" mode="mode1"/>
</xsl:template>

<!-- Second Transformation -->
<xsl:template match="text()" mode="mode1">
<xsl:value-of select="translate(., 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" />
</xsl:template>

然后您可以使用两个模板,其中一个处理另一个的结果。

关于xml - XSLT - 按顺序应用两个不同的模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38267254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com