如何根据选择条件将节点集存储在变量中
我有以下 XML 结构
<pages>
<page id="8992" filename="news7" extension=".aspx" title="News 7"
real="True" virtual="False" visible="True" day="18" month="3"
year="2010" />
<page id="8991" filename="news6" extension=".aspx" title="News 6"
real="True" virtual="False" visible="True" day="18" month="3"
year="2010" />
<page id="8990" filename="news5" extension=".aspx" title="News 5"
real="True" virtual="False" visible="True" day="18" month="3"
year="2010" />
<page id="8883" filename="news2" extension=".aspx" title="News 2"
real="True" virtual="False" visible="True" day="15" month="2"
year="2010" />
<page id="8989" filename="news4" extension=".aspx" title="News 4"
real="True" virtual="False" visible="True" day="18" month="3"
year="2009" />
</pages>
现在有一个变量,
<xsl:variable name="valid_pages"/>
我想根据以下条件将 /pages/page 存储在变量中
<xsl:variable name="valid_pages">
<xsl:when test="count(/pages/page) < 2">
<xsl:value-of select="/pages/page[0]" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="/pages/page[position() > 2]" />
</xsl:otherwise>
</xsl:variable>
,现在当我使用时
<xsl:value-of select="count($valid_pages)" />
出现错误
在 a 中使用结果树片段 路径表达式,首先将其转换为 使用 msxsl:node-set() 进行节点集 函数
I have following XML structure
<pages>
<page id="8992" filename="news7" extension=".aspx" title="News 7"
real="True" virtual="False" visible="True" day="18" month="3"
year="2010" />
<page id="8991" filename="news6" extension=".aspx" title="News 6"
real="True" virtual="False" visible="True" day="18" month="3"
year="2010" />
<page id="8990" filename="news5" extension=".aspx" title="News 5"
real="True" virtual="False" visible="True" day="18" month="3"
year="2010" />
<page id="8883" filename="news2" extension=".aspx" title="News 2"
real="True" virtual="False" visible="True" day="15" month="2"
year="2010" />
<page id="8989" filename="news4" extension=".aspx" title="News 4"
real="True" virtual="False" visible="True" day="18" month="3"
year="2009" />
</pages>
Now there is a variable
<xsl:variable name="valid_pages"/>
I want to store /pages/page in a variable based on following conditions
<xsl:variable name="valid_pages">
<xsl:when test="count(/pages/page) < 2">
<xsl:value-of select="/pages/page[0]" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="/pages/page[position() > 2]" />
</xsl:otherwise>
</xsl:variable>
now when I use
<xsl:value-of select="count($valid_pages)" />
I get an error
To use a result tree fragment in a
path expression, first convert it to a
node-set using the msxsl:node-set()
function
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
使用:
Use:
首先,这个
position() = 0
是错误的 定义。其次,如果您想要某种以第二个为基准的分区,请使用
注意:如果没有第二个,它就不会是第三个......
First, this
position() = 0
is false by definition.Second, if you want some kind of partition with second as pivot, use
Note: If there is no second, it won't be a third...
结果树片段(例如
valid_pages
变量)可以通过应用依赖于处理器的函数转换为节点集。像 Saxon9he 这样的 XSLT 2.0 处理器不需要这个,因为在 2.0 RTF 中会自动解释为节点集,但对于您似乎正在使用的 MSXML 6.0 这样的 XSLT 1.0 处理器,以下内容将起作用:我知道的另一个 RTF 到节点集函数对于 Xalan-J 或 -C,of 是
xalan:nodeset()
。不要忘记在样式表根元素中包含名称空间声明:
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
或xmlns:xalan="http://xml.apache.org/xalan"
顺便说一句,
valid_pages
变量的声明是错误的;根本不考虑重要性和实用性,至少应该写成包含xsl:choose
,如下所示:Result tree fragments like your
valid_pages
variable can be converted into a node-set by applying a processor-dependent function. XSLT 2.0 processors like Saxon9he will not need this, because in 2.0 RTF's are automatically interpreted as node-sets, but for XSLT 1.0 processors like MSXML 6.0 which you seem to be using, the following will work:Another RTF to nodeset function that I know of is
xalan:nodeset()
for Xalan-J or -C.Don't forget to include the namespace declaration in the stylesheet root element:
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
orxmlns:xalan="http://xml.apache.org/xalan"
By the way the declaration of the
valid_pages
variable is wrong; not looking at significance and usefulness at all, it should at the least be written includingxsl:choose
as follows: