我可以将节点发送到XSLT函数吗?例如:
<books>
<book>
<author>a1</author>
<price>10</price>
<year>2009</year>
</book>
<!-- ... -->
</books>
Run Code Online (Sandbox Code Playgroud)
我可以将<book>元素发送到函数 - 在该函数中我想处理book(<author>,<price>或<year>)下的节点
我可以创建一个xsl:function如下所示?
<xsl:function name="util:checkNode" as="xs:boolean">
<!-- I would like to know xml schema data type for the param -->
<xsl:param name="nodeP" as="****"/>
</xsl:function
If yes, what xsl schema type to the param ?
Run Code Online (Sandbox Code Playgroud)
看起来我通过说函数而不是xsl来创建很多混乱:函数---- :(
我想你的问题的答案是肯定的.您可以将节点发送到XSLT函数.
如果您想知道如何使用as =""属性的值,您有几个选择.如果你想要非常宽松并接受任何事情,请使用as ="item()*".
item()*..类型的节点集?W3C
是的,我同意它看起来毫无意义.然而.从CR开始,它非常重要,特别是如果你想使用类型.并且想要在变量中生成一个节点集..抱歉序列.
<xsl:variable name="a"
select="(//h3)[position() < 3]"
as="item()*"/>
Run Code Online (Sandbox Code Playgroud)
这样就可以很容易地使用xpath创建一个变量.即记住item()*.
类型......一些例子.W3C
来自Mike Kay的解释性电子邮件,谢谢Mike.例子:
<xsl:param name="x" as="item()"/>参数值可以是任何项(即节点或原子值).但它必须是单一项目.
<xsl:param name="x" as="item()?"/>参数可以是单个项目,也可以是空序列
<xsl:param name="x" as="item()+"/>参数必须是一个或多个项的序列 - 不允许空序列
<xsl:param name="x" as="item()*"/>参数可以是零个或多个项目的任何序列 - 这对其值没有任何限制.
<xsl:param name="x" as="node()*"/>参数可以是零个或多个节点的任何序列
<xsl:param name="x" as="xs:atomicValue*"/>参数可以是零个或多个原子值的任何序列(例如整数,字符串或布尔值).
item()*是最常用的类型,它匹配所有内容,例如Java中的"Object".因此,通常可以省略.但并非总是如此,例如xsl:variable中的默认类型不是item()*而是document-node(),以确保
<xsl:variable name="rtf"><a>thing</a> </xsl:variable>继续表现得像XSLT 1.0
使用这些来指定参数,变量类型等.
| 归档时间: |
|
| 查看次数: |
6759 次 |
| 最近记录: |