版本更改时令人困惑的声明



我有下面的XSLT语句。

 <xsl:value-of select="substring-after(
    ./title/content-style/text(),' ')" />

当我使用样式表版本 1 作为

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

但是当我将其更改为 2.0 版时,如下所示。

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

它抛出以下错误

XSLT 2.0 Debugging Error: Error: 
file:///C:/Users/u0138039/Desktop/Proview/HK/HKWB2014/XSLT%20and%20CSS/new_bull.xsl:202: 
Wrong occurrence to match required sequence type -   
Details: -     XPTY0004: The supplied sequence ('2' item(s)) has 
the wrong occurrence to match the sequence type xs:string ('zero or 
one')

请让我知道 XSL1.0 中正确的方向在 XSL 2.0 中出了问题。

谢谢

在 XSLT 1.0 中,当您将包含多个节点的节点集传递给需要单个字符串的函数时,它只是使用该集中第一个节点的字符串值,而忽略其余节点。 在XSLT 2.0中,substring-after函数期望其参数xs:string?,即零个或一个字符串,因此,如果您向它传递一个包含多个项目的序列,则会导致类型不匹配错误。

我假设./title/content-style/text()选择多个节点,即content-style元素中有多个title、多个content-style和/或多个文本节点。

考虑一下你是否真的需要在这里使用 text() - 你真的需要单独处理content-style的每个文本节点子节点,还是你只需要整个content-style元素的字符串值? 如果是前者,您需要类似 title/content-style/text()/substring-before(., ' ') 的东西(仅适用于 2.0(,如果是后者,请尝试只说 substring-after(title/content-style, ' ') .

我遇到了同样的问题,但对我来说,事实证明,虽然我的架构,对于有问题的元素,具有多重性optional设置,但它没有unbounded设置,并且我使用的输入数据有 2 个元素,它期望 0...1

相关内容

  • 没有找到相关文章

最新更新