gpt4 book ai didi

xslt - 文本节点中的 XSL 属性表达式符号

转载 作者:行者123 更新时间:2023-12-05 09:23:06 26 4
gpt4 key购买 nike

value-of 太可怕了。当我需要将大量变量值插入文本节点时,它确实污染了 XSL 文件。

有没有办法能够在输出文本节点内部使用属性表达式表示法,即 text text {$variable}?或者至少是比 value-of 更简洁的东西?

最佳答案

不在 XSLT 1.0 中。但是,在 XSLT 3.0 中,您可以使用 TVT ( text value templates )。它们的工作方式与 AVT ( attribute value templates ) 相同。

要使用 TVT,请将标准属性 xsl:expand-text="yes" 添加到元素中。这将导致处理器将该元素的后代文本节点视为 TVT。

例子:

XSLT 3.0

<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes"/>

<xsl:template match="/">
<xsl:variable name="who" select="'Dan'"/>
<xsl:variable name="what" select="'BAM!'"/>
<result xsl:expand-text="yes">This is {$who}'s result: {$what}</result>
</xsl:template>

</xsl:stylesheet>

输出(使用任何格式正确的 XML 作为输入)

<result>This is Dan's result: BAM!</result>

注意:使用 Saxon-PE 9.5 测试。

这是一个更好的例子,显示正在评估的“后代”文本节点......

XML 输入

<test>
<v1>one</v1>
<v2>two</v2>
<v3>three</v3>
</test>

XSLT 3.0

<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>

<xsl:template match="/*">
<result xsl:expand-text="yes">
<value>Value of v1: {v1}</value>
<value>Value of v2: {v2}</value>
<value>Value of v3: {v3}</value>
</result>
</xsl:template>

</xsl:stylesheet>

输出

<result>
<value>Value of v1: one</value>
<value>Value of v2: two</value>
<value>Value of v3: three</value>
</result>

关于xslt - 文本节点中的 XSL 属性表达式符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24210387/

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