首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >参数值的必需项类型是节点();所提供的值具有项目类型xs:string

参数值的必需项类型是节点();所提供的值具有项目类型xs:string
EN

Stack Overflow用户
提问于 2017-10-23 13:14:04
回答 1查看 1.9K关注 0票数 0

我有下面的XML

代码语言:javascript
复制
<content.text.block>
<text.line>context1</text.line>
<text.line>context2</text.line>
<text.line>context3</text.line>
<text.line>context4</text.line>
<text.line>context5</text.line>
<text.line>context6</text.line>
<text.line suppress-flag="y">context7</text.line>
</content.text.block>

下面是我使用的xslt代码

代码语言:javascript
复制
<xsl:for-each select="$textline[not(@suppress-flag = 'y')]">
  <xsl:call-template name="populatetextNumber">
  <xsl:with-param name="textNumber" select="current()" as="node()"/>
  </xsl:call-template>
</xsl:for-each>
 <xsl:for-each select="$textline[@suppress-flag = 'y']">
  <xsl:call-template name="populatetextNumber">
  <xsl:with-param name="textNumber" select="current()" as="node()"/>
  </xsl:call-template>
</xsl:for-each>

$textline包含"text.line“元素中的值。

第一个-每个都很好。但是第二个for-每个抛出下面的错误。

参数$textNumber值的必需项类型是节点();所提供的值具有项目类型xs:string。

对于没有任何属性的元素,代码似乎工作得很好。但是,当涉及到具有属性的元素时,这是一个问题。

使用‘as=’节点()‘也没有帮助

EN

回答 1

Stack Overflow用户

发布于 2017-10-23 16:10:34

这里的问题是命名模板textNumber的参数populatetextNumber与该参数传递的值(即字符串)之间的类型不匹配。(从错误消息中可以看出这一点;如果不是,请再读一遍错误消息,直到您理解它在说什么。)

你说

$textline包含"text.line“元素中的值。

如果这是正确的(我猜是正确的,因为它符合错误消息的意思),那么$textline将包含一个字符串或一个字符串序列。使用for-每个字符串序列进行迭代,不会将其中的任何字符串转换为树节点。

如果要将模板populatetextNumber作为参数传递给节点,则更改for-each的select表达式以选择text.line元素,或者更改$textline的声明,使其成为元素序列,而不是字符串序列。

如果出于任何原因,您希望保留$textline和for -每个模板,则需要更改命名的模板populatetextNumber,以接受字符串而不是节点作为其textNumber参数的值。

请注意,许多回答堆栈溢出问题的人不喜欢忽略相关信息的问题。如果您包含了变量$textline的声明(因为它的实际类型是问题的一部分),并且至少包含了命名模板populatetextNumber的参数声明(因为声明的类型是类型冲突的另一部分),那么您的问题会更好(并且更有可能得到快速答案)。当您省略这样的信息时,Stack溢出的一些读者会推断,您要么不知道如何问一个连贯的问题(SO help files中的好建议),要么您不太关心回答者给他们提供所需信息的时间。这种推断可能不公平,但它与您提供的所有信息都是一致的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46890267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档