我有下面的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')
请让我知道在XSL 2.0中XSL1.0中出现了什么问题。
由于
答案 0 :(得分:3)
在XSLT 1.0中,当您将一个以上节点的节点集传递给需要单个字符串的函数时,它只使用集合中 first 节点的字符串值并忽略其余的。在XSLT 2.0中,substring-after
函数期望其参数为xs:string?
,即零或一个字符串,因此如果您传递一个包含多个项的序列,则会导致类型不匹配错误。
我认为./title/content-style/text()
选择了多个节点,即title
中有多个content-style
,多个content-style
和/或多个文本节点} element。
考虑一下你是否真的需要在这里使用text()
- 你真的需要单独处理content-style
的每个文本节点子节点,还是只需要{{1}的字符串值?元素作为一个整体?如果是前者,则需要content-style
(仅适用于2.0),如果是后者,请尝试说title/content-style/text()/substring-before(., ' ')
。
答案 1 :(得分:0)
我遇到了同样的问题,但对我来说,事实证明,虽然我的架构对于相关元素具有多重optional
设置,但它没有unbounded
设置,并且我使用的输入数据有2个元素,期望0 ... 1