是否可以在 XSLT 中使用 sprintf() 函数?

发布于 2024-09-15 00:41:50 字数 128 浏览 3 评论 0原文

我想做一些类似“Hello %s”的事情,并将“World”放在另一个变量中。

当然,我可以使用字符串替换来完成这个简单的情况,但如果可能的话,我想要所有 sprintf() 功能,例如参数重新排序,这对我自己来说会非常复杂。

I'd like to do something like "Hello %s" and have "World" in another variable.

Of course I could do this simple case using string replacement but if possible I'd like all sprintf() features like argument reordering, which would be very complex to do myself.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

ζ澈沫 2024-09-22 00:42:02

如果您在支持使用扩展对象扩展 XSLT 的语言(例如 .NET 语言或 PHP 之一)中执行转换;那么您可以简单地创建一个函数来执行此操作并从 XSLT 中调用它。

If you are performing the transform inside a language that supports extending XSLT using an extension object (such as one of the .NET languages or PHP); then you can simply create a function to do this and call it from within your XSLT.

甜扑 2024-09-22 00:41:57

Hello World 的 XML/XSLT 等价物是这样的

我们有这个 XML 文档:

<t>Hello <rep/>!</t>

并对其使用此转换

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

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

 <xsl:template match="rep">
  <xsl:value-of select="'World'"/>
 </xsl:template>
</xsl:stylesheet>

生成了想要的结果

<t>Hello World!</t>

请注意

  1. 我们使用并覆盖身份规则。这是最基本的 XSLT 设计模式。

  2. 我们可以将恒定的内容与许多不同的替换元素散布在一起,从而拥有“填空”技术

  3. 使用此技术可以实现内容和处理逻辑之间的完全分离。 XSLT 代码不知道它正在处理什么源 XML 文档(文档 URL 甚至可以作为参数传递)。任何填空文档都可以使用相同的 XSLT 样式表,并且任何填空文档都可以由不同的 XSLT 样式表处理。这种分离实现了最大的灵活性和可维护性。

  4. 如果您只想仅生成文本,这也可以轻松完成 - 例如使用

The XML/XSLT equivalent of Hello World is this:

We have this XML document:

<t>Hello <rep/>!</t>

and use this transformation on it:

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

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

 <xsl:template match="rep">
  <xsl:value-of select="'World'"/>
 </xsl:template>
</xsl:stylesheet>

The wanted result is produced:

<t>Hello World!</t>

Do note:

  1. We use and override the identity rule. This is the most fundamental XSLT design pattern.

  2. We can intersperse a constant content with many different replacement elements and thus have a "fill-in the blanks" technique.

  3. Using this technique a full separation between content and processing logic can be achieved. The XSLT code doesn't know what source XML document it is processing (the document URL can even be passed as parameter). The same XSLT stylesheet can be used any fill-in the blanks document and any fill-in the blanks document can be processed by different XSLT stylesheets. This separation achieves maximum flexibility and maintainability.

  4. If you only want just text to be produced, this can also be done easily -- for example using <xsl:output method="text"/>

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文