xml - 使用 xsl:for-each 循环而不是 xsl:variable 中的 select="expr" 进行查询时面临的问题
问题描述
当我使用 2 种不同的技术来选择元素时,变量 $var 得到不同的计数:-
<xsl:variable name="var" select="$doc//ns:abc | $doc//ns:xyz"/>
<xsl:message select="count($var)"/>
给出适当的计数
然而
<xsl:variable name="var" >
<xsl:for-each select="$doc//ns:abc | $doc//ns:xyz">
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:variable>
<xsl:message select="count($var)"/>
给 1
如何也使用 for-each 循环获得适当的计数。因为我想按排序顺序存储元素,这只能通过在 xsl:for-each/ 中使用 xsl:sort/ 来完成。
解决方案
如果是
<xsl:variable name="var" >
<xsl:for-each select="$doc//ns:abc | $doc//ns:xyz">
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:variable>
该变量的值是一个文档片段节点,其中包含您选择的元素的副本。
您需要在and上使用as
属性xsl:variable
xsl:sequence
<xsl:variable name="var" as="node()*">
<xsl:for-each select="$doc//ns:abc | $doc//ns:xyz">
<xsl:sequence select="."/>
</xsl:for-each>
</xsl:variable>
或者干脆
<xsl:variable name="var" as="node()*">
<xsl:sequence select="$doc//ns:abc | $doc//ns:xyz"/>
</xsl:variable>
从输入文档中选择节点作为节点序列。
请注意,XPath 3 也有一个sort
函数,因此即使您需要对输入节点进行排序,您也不需要像这样的 XSLT 元素,xsl:for-each/xsl:sort
或者xsl:perform-sort/xsl:sort
只需在XPath 表达式中使用该sort
函数。select
推荐阅读
- python - 如何在 .env 文件中保存多个登录名以连接到 postgresql 数据库?
- python - 尽管安装了 simple-smartsheet,脚本仍返回 ModuleNotFoundError
- web-testing - 如何让 testRigor 找到这些输入?
- javascript - 不同计算机上的纪元日期转换结果不同
- r - 在用户创建的函数中对公式语法使用 quasiquotation?
- java - 如何将 log4j2.xml 从文件配置到标准输出?
- javascript - REGEX - 从字符串中删除小数
- swift - 如何为底部安全区域的列表视图添加背景颜色SwiftUI iOS 14
- macos - 为什么 nkf 命令从 UTF8-MAC 转换为 UTF8 时会删除一个字符?
- javascript - Firestore != 查询错误:'"!="' 类型的参数不可分配给 'WhereFilterOp'.ts(2345) 类型的参数