gpt4 book ai didi

xslt - 使用 xslt 替换功能将单词替换为元素

转载 作者:行者123 更新时间:2023-12-01 13:03:27 26 4
gpt4 key购买 nike

我想用 XSLT 替换函数来替换文本中的单词

<strong>word</strong>.

我写了以下模板:
<xsl:template name="make-bold">
<xsl:param name="text"/>
<xsl:param name="word"/>
<xsl:variable name="replacement">
<strong><xsl:value-of select="$word"/></strong>
</xsl:variable>
<xsl:value-of select="replace($text, $word, $replacement )" />
</xsl:template>

不幸的是, 没有渲染,尽管其余的工作。

有人可以帮助我吗?

最好的,随都

最佳答案

那么替换功能http://www.w3.org/TR/xpath-functions/#func-replace接受一个字符串并返回一个字符串。您似乎想要创建一个元素节点,而不是一个简单的字符串。在这种情况下,使用分析字符串 http://www.w3.org/TR/xslt20/#analyze-string而不是替换可能会有所帮助。

这是一个示例 XSLT 2.0 样式表:

<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">

<xsl:output method="html" indent="no"/>

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

<xsl:template match="p">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:apply-templates select="text()" mode="wrap">
<xsl:with-param name="words" as="xs:string+" select="('foo', 'bar')"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>

<xsl:template match="text()" mode="wrap">
<xsl:param name="words" as="xs:string+"/>
<xsl:param name="wrapper-name" as="xs:string" select="'strong'"/>
<xsl:analyze-string select="." regex="{string-join($words, '|')}">
<xsl:matching-substring>
<xsl:element name="{$wrapper-name}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template>

</xsl:stylesheet>

当您使用 XSLT 2.0 处理器(如 Saxon 9)针对以下输入示例运行它时
<html>
<body>
<p>This is an example with foo and bar words.</p>
</body>
</html>

输出如下:
<html>
<body>
<p>This is an example with <strong>foo</strong> and <strong>bar</strong> words.</p>
</body>
</html>

关于xslt - 使用 xslt 替换功能将单词替换为元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4408404/

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