使用 XSLT 中的函数

发布于 2024-11-05 04:31:16 字数 1945 浏览 1 评论 0原文

我正在学习 XSLT。这些问题可能是显而易见的,但我现在真的很困惑。 Oxygen 返回以下两种错误:

  1. 未为“ownFunction()”声明命名空间。 (“未声明的命名空间前缀 {xs}”)

  2. 未知的系统函数 index-of-string()
    XSLT 函数 index-of-string I从此网站获取的内容似乎无法被识别

    < /p>

这是 XSL 文件的简化版本:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"     xmlns:foo="http://www.wathever.com">
<xsl:output method="xml" />

  <xsl:function name="foo:ownFunction" as="xs:string">
    <xsl:param name="string" as="xs:string"/>

        <xsl:choose>

          <xsl:when test='contains($string,"src=")'>
            <xsl:variable name="position"><xsl:value-of select="index-of-string($string,'src=')"/>+<xsl:number value="10"/></xsl:variable>
            <xsl:variable name="partString"><xsl:value-of select="substring($string,$position)"/></xsl:variable>
            <xsl:variable name="length"><xsl:value-of select="index-of-string($partString,'quot;')"/> - <xsl:number value="2"/></xsl:variable>
            <xsl:value-of select="substring($partString,1,$length)"/>
          </xsl:when>

          <xsl:otherwise>
            <xsl:value-of select="hotpot-jmatch-file/data/title"/>
          </xsl:otherwise>

        </xsl:choose>
  </xsl:function>

  <xsl:template match="/">
    <data>
      <title>
        <xsl:variable name="string"><xsl:value-of select="hotpot-jmatch-file/data/title"/></xsl:variable>
        <xsl:value-of select="foo:ownFunction($string)"/>
      </title>
    </data>
  </xsl:template>
</xsl:stylesheet>

I'm learning XSLT. These questions may be obvious, but I'm really stuck now.
Oxygen returns the following two kind of errors:

  1. Namespace is not declared for 'ownFunction()'. ("undeclared namespace prefix {xs}")

  2. unknown system function index-of-string()

    The XSLT function index-of-string I got from this website doesn't seems to be recognized

This is a simplified version of the XSL file:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"     xmlns:foo="http://www.wathever.com">
<xsl:output method="xml" />

  <xsl:function name="foo:ownFunction" as="xs:string">
    <xsl:param name="string" as="xs:string"/>

        <xsl:choose>

          <xsl:when test='contains($string,"src=")'>
            <xsl:variable name="position"><xsl:value-of select="index-of-string($string,'src=')"/>+<xsl:number value="10"/></xsl:variable>
            <xsl:variable name="partString"><xsl:value-of select="substring($string,$position)"/></xsl:variable>
            <xsl:variable name="length"><xsl:value-of select="index-of-string($partString,'quot;')"/> - <xsl:number value="2"/></xsl:variable>
            <xsl:value-of select="substring($partString,1,$length)"/>
          </xsl:when>

          <xsl:otherwise>
            <xsl:value-of select="hotpot-jmatch-file/data/title"/>
          </xsl:otherwise>

        </xsl:choose>
  </xsl:function>

  <xsl:template match="/">
    <data>
      <title>
        <xsl:variable name="string"><xsl:value-of select="hotpot-jmatch-file/data/title"/></xsl:variable>
        <xsl:value-of select="foo:ownFunction($string)"/>
      </title>
    </data>
  </xsl:template>
</xsl:stylesheet>

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

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

发布评论

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

评论(2

挖个坑埋了你 2024-11-12 04:31:16

Oxygen返回以下两种
错误数:

1) 未声明命名空间
'自己的函数()'。 (“未声明的
命名空间前缀 {xs}")

这实际上是一个 XML 问题。任何 XSLT 样式表都可能是格式良好的 XML 文档。除了格式良好的其他要求之外,使用的任何命名空间前缀都必须绑定到命名空间声明中的命名空间 URI。

要更正此问题,请将 "xs" 前缀绑定到 "http://www.w3.org/2001/XMLSchema" —— 这意味着添加 xmlns: xs="http://www.w3.org/2001/XMLSchema" 到一个元素(通常顶部元素是这个命名空间的不错选择。

您对 "foo:ownFunction 也有同样的问题"。在使用前缀 "foo" 之前,您必须绑定/定义且可见。只需将 xmlns:foo="my:foo" 添加到样式表的顶部元素。

2)“未知的系统功能
字符串索引()”。XSLT 函数
我从中得到的“字符串索引”
网站似乎没有
认可:
http://www.xsltfunctions.com/xsl/functx_index-of-string。 html

您忘记从 Priscilla Walmsley 的网站复制并粘贴该函数,或者忘记将其保存在单独的文件中(推荐),然后使用 将此样式表文件导入/包含到您的转换中。

最后,此类问题表明您需要更系统地介绍 XSLT。找一本好书,好好读。你不会后悔的。 这个答案 可能有助于列出我认为好的 XSLT 和 XPath 学习资源。

Oxygen returns the following two kind
of errors:

1) Namespace is not declared for
'ownFunction()'. ("undeclared
namespace prefix {xs}")

This is actually an XML issue. Any XSLT stylesheet myst be a well-formed XML document. Among other requirements for well-formedness, any namespace prefix used must be bound to a namespace URI in a namespace declaration.

To correct this bind the "xs" prefix to "http://www.w3.org/2001/XMLSchema" -- this means to add xmlns:xs="http://www.w3.org/2001/XMLSchema" to an element (usually the top element is a good choice for this namespace.

You have the same problem with "foo:ownFunction". You must have the prefix "foo" bound/defined and visible, before using it. Just add xmlns:foo="my:foo" to the top element of your stylesheet.

2) "unknown system function
index-of-string()". The XSLT function
"index-of-string" I got from this
website doesn't seems to be
recognized:
http://www.xsltfunctions.com/xsl/functx_index-of-string.html

You have forgotten to either copy and paste the function from Priscilla Walmsley's site or to save it in a separate file (recommended) and then use <xsl:import> or <xsl:include> to import/include this stylesheet file to your transformation.

Finally, such issues show that you need a more systematic introduction of XSLT. Get a good book and read it well. You won't be sorry. This answer may be useful in listing what I consider good XSLT and XPath learning resources.

浮世清欢 2024-11-12 04:31:16

使用

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

<xsl:import href="location-of-functx-library.xsl"/>

...

<xsl:value-of select="functx:index-of-string($partString,'quot;')"/>

该示例定义了架构命名空间并将其绑定到前缀 xs,定义了您链接到的函数库的命名空间。您还需要下载函数库实现并导入它,如图所示。

Use

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

<xsl:import href="location-of-functx-library.xsl"/>

...

<xsl:value-of select="functx:index-of-string($partString,'quot;')"/>

That samples defines the schema namespace and binds it to the prefix xs, defines the namespace of the function library you linked to. You will also need to download the function library implementation and import it as shown.

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