Xml 如何将节点(任意)发送到xsl:function?
我可以向XSLT函数发送节点吗?例如:Xml 如何将节点(任意)发送到xsl:function?,xml,xslt,Xml,Xslt,我可以向XSLT函数发送节点吗?例如: <books> <book> <author>a1</author> <price>10</price> <year>2009</year> </book> <!-- ... --> </books> a1 10 2009 我可以将元素发送到函数吗?在该函数中,我希望处理book(、或
<books>
<book>
<author>a1</author>
<price>10</price>
<year>2009</year>
</book>
<!-- ... -->
</books>
a1
10
2009
我可以将
元素发送到函数吗?在该函数中,我希望处理book(
、
或
下的节点)
我可以创建如下xsl:函数吗
<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 ?
XSL不关心参数是什么。它真的把一切都当作XML。如果传入文本,则将其视为文本节点
下面是一个带有链接的示例,以供进一步参考
要添加到答案中,您可能需要在XPath查询中添加一个:
<xsl:call-template name="TemplateName">
<xsl:with-param name="ParamName" select="MyNode/MyNode/node()" />
</xsl:call-template>
<xsl:template name="TemplateName">
<xsl:param name="ParamName" />
</xsl:template>
正式而言,node()
不是一个函数,它是一个测试,但可以返回一个类似于XmlNode.InnerXml
属性的值。在您的问题中:
我可以将元素发送到函数吗?在该函数中,我希望处理book下的节点(对于book
元素)
当然,您可以通过多种方式来实现这一点——在一个循环中,实际使用等将book
节点发送到模板中——但一个简单的方法应该可以实现您所需要的功能。模板匹配的任何内容都是“参数”
有很多XSLT函数接受节点作为参数。例如,concat
的所有参数都可以是节点,例如:
concat(myelement, myelement/@myattribute)
虽然这正好回答了你提出的问题,但我敢打赌,这不是你想要回答的问题。但是,见鬼,你问了四次,就这样吧
编辑
实际上,属性不是节点;只有元素、文本、注释、处理指令和CDATA部分是节点。但是上面的示例仍然正确地回答了这个问题。我认为您的问题的答案是,是的。可以将节点发送到XSLT函数
如果您想知道as=”“属性的值使用什么,您有几个选择。如果您想非常宽松,接受任何东西,请使用as=“item()*”
:
item()*…节点集的排序?W3C
是的,我同意它看起来很漂亮
毫无意义,不是吗。然而,从
CR,它非常重要,尤其是
如果您想要使用类型。并且想要
比如说,生成一个节点集..对不起
序列,在变量中
这将创建一个可以破解的变量
非常容易地使用xpath。
记住item()*
类型…一些示例。W3C
来自迈克的一封解释性电子邮件
凯,谢谢你,迈克。例子:
参数值可以是任何项目
(即节点或原子值)。但是
必须是单个项目
该参数可以是单个项目,也可以是
空序列
参数必须是一个
一个或多个项目-空序列
不允许
该参数可以是以下任意序列:
零个或多个项目-此项不放置
对其价值的限制
该参数可以是以下任意序列:
零个或多个节点
该参数可以是以下任意序列:
零个或多个原子值(例如。
整数、字符串或布尔值)
item()*是最通用的类型
可能,它匹配所有东西,比如
Java中的“对象”。因此
通常可以省略,但不能省略
始终,例如默认类型
在xsl中:变量不是item()*而是
document-node(),以确保
东西
继续像XSLT1.0一样工作
使用这些参数指定参数,
变量类型等
不确定这是什么意思,但您的XPath在语义上与ChaosPandion的答案不同。看起来我的问题不清楚,我能不能有一个接受节点作为参数的函数?如果可以,我能有一个示例代码语法吗?Pavel,我知道.InnerXml不同于.OuterXml---还有那/MyNode/node()与/MyNode不同。我正在寻找一个XSLT函数,它接受一个节点(基本上是任何节点)作为XSLT函数的参数?如果是,我可以知道XSLT函数的语法吗?你是否要求人们为你编写实际的代码?这恐怕不会很好地工作,考虑到问题的措辞(“函数”,等等)为了简单地处理这个节点,我认为@unknown对xslt来说是一个新概念。使用books/book的一些示例代码可能会有所帮助,特别是对于在搜索中发现这个问题的其他xslt新手来说。我正在寻找一个xslt函数,它接受一个节点(基本上是任何节点)作为XSLT函数的参数?如果是,我可以得到XSLT函数的语法吗?为什么要将原始问题粘贴到每个答案中作为注释?我正在寻找一个XSLT函数,它接受一个节点(基本上是任何节点)作为XSLT函数的参数?如果是,我可以得到XSLT函数的语法吗?我正在寻找一个XSLT函数,它接受一个节点(基本上是任何节点)作为XSLT函数的参数?如果是,我可以得到XSLT函数的语法吗?
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="books">
<xsl:apply-templates select="book"/>
</xsl:template>
<xsl:template match="book">
author: <xsl:value-of select="author" />
price: <xsl:value-of select="price" />
year: <xsl:value-of select="year" />
</xsl:template>
</xsl:stylesheet>
<xsl:template match="book">
author: <xsl:value-of select="author" />
price: <xsl:value-of select="price" />
<xsl:apply-templates select="year" />
</xsl:template>
<xsl:template match="year">
<xsl:choose>
<xsl:when test="year < '2000'">
from a prior century: <xsl:value-of select="." />
</xsl:when>
<xsl:otherwise>
from this century: <xsl:value-of select="." />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
concat(myelement, myelement/@myattribute)
<xsl:variable name="a"
select="(//h3)[position() < 3]"
as="item()*"/>