如何为变量分配包含一组节点的另一个变量的副本? 这是我的代码:
echo $address.'<br>Lat: '.$lat.'<br>Long: '.$long;
我定义了另一个变量,因为后来它被用作每个循环计数器。
<xsl:variable name="btchs" select="$idoc/E1EDL20/E1EDL24[./HIPOS != 0]"></xsl:variable>
<xsl:variable name="lines" select="$idoc/E1EDL20/E1EDL24[./HIPOS = 0]"></xsl:variable>
<xsl:variable name="cnt" select="count($btchs)"></xsl:variable>
<xsl:variable name="blines">
<xsl:choose>
<xsl:when test="$cnt=0">
Here I want to make a copy all nodes of $lines variable
</xsl:when>
<xsl:otherwise>
Here I want to make a copy all nodes of $btchs variable
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
答案 0 :(得分:2)
这取决于您是使用XSLT-1.0还是XSLT-2.0。
在XSLT-1.0中,以下quote is determinative:
在XSLT 1.0中,结果树片段(RTF)类型就像一个节点集,但它实际上是一个二等公民。每当使用xsl:variable构造临时树时,都会获得RTF。问题是你不能使用XPath表达式访问这棵树的内部,除非你使用特定于供应商的扩展函数,通常称为node-set(),将RTF转换为第一个-class node-set(由一个根节点组成)。
因此,在XSLT-1.0中,您只能获得一个无法通过进一步的XPath查询查询的RTF,因此无法满足您的需求。
回到问题的核心,以下规则适用于您的XSL版本:
<xsl:variable name="abc" select="..." />
- &gt;可查询 <xsl:variable name="bcd"><xsl:whatever-function>...</xsl:whatever-function>
- &gt; 无法查询 <xsl:variable name="abc" select="..." />
- &gt;可查询 <xsl:variable name="bcd"><xsl:whatever-function>...</xsl:whatever-function>
- &gt; queryable - 确实将该变量中的所有节点作为树返回。概要:您无法使复杂构造的XSLT-1.0变量包含树的完全可查询子集!
答案 1 :(得分:2)
查看您的XSLT片段,看起来您希望blines
变量包含E1EDL24
不为零的所有HIPOS
元素,如果不存在这样的元素,则应包含E1EDL24
为零的所有HIPOS
。
如果是这种情况,您可以按如下方式定义blines
变量,而不是尝试复制变量中的元素:
<xsl:variable name="blines" select="$btchs|$lines[not($btchs)]" />
这将引用源XML中的原始元素,而不是创建结果树片段,因此仍然可以查询。