Xslt 用子树填充变量
在Xslt 用子树填充变量,xslt,Xslt,在version=“2.0”样式表中: 以下代码生成正确的输出 <xsl:variable name="obj"> <xsl:choose> <xsl:when test="t:ReferencedObjectType='Asset'"> <xsl:value-of select="/t:Flow/t:FHeader/t:Producer/t:Repository" /> </xsl:when> &l
version=“2.0”
样式表中:
以下代码生成正确的输出
<xsl:variable name="obj">
<xsl:choose>
<xsl:when test="t:ReferencedObjectType='Asset'">
<xsl:value-of select="/t:Flow/t:FHeader/t:Producer/t:Repository" />
</xsl:when>
</xsl:choose>
</xsl:variable>
<xsl:choose>
<xsl:value-of select="$obj"/>
但这一个没有
<xsl:variable name="obj">
<xsl:choose>
<xsl:when test="t:ReferencedObjectType='Asset'">
<xsl:value-of select="/t:Flow/t:FHeader/t:Producer" />
</xsl:when>
</xsl:choose>
</xsl:variable>
<xsl:choose>
<xsl:value-of select="$obj/t:Repository"/>
如何让第二个代码按预期运行?
如果需要,v3中是否有解决方案
此代码也不运行
<xsl:variable name="obj">
<xsl:choose>
<xsl:when test="t:ReferencedObjectType='Asset'">
<xsl:copy-of select="/t:Flow/t:FHeader/t:Producer" />
</xsl:when>
</xsl:choose>
</xsl:variable>
<xsl:choose>
<xsl:value-of select="$obj/t:Repository"/>
相关xml输入
<Flow>
<FHeader>
<Producer>
<Repository>tests.com</Repository>
</Producer>
</FHeader>
</Flow>
tests.com
您只需选择
。或者,正如Tim已经评论的那样,使用xsl:copy of
,同时考虑到您以后需要选择正确的级别,例如$obj/t:Producer/t:Repository
或者了解as
属性并使用例如
,然后您以后可以使用例如$obj/t:Repository
还有xsl:sequence
来选择输入节点,而不是复制它们,特别是使用xsl:variable
时,如果使用作为
属性。这可能会消耗更少的内存
此外,XPath 2和更高版本在表达式级别具有
if(条件表达式)then expression else expression
条件表达式,因此您可能不需要XSLT和xsl:choose/xsl:when
,但可以使用
,这样,您就可以选择一个输入t:Producer
元素,如果使用该变量,您可以直接选择t:Repository
子元素。xsl:value of
只返回节点的字符串值。您可能想使用xsl:copy of
来复制t:Repository
元素本身。@TimC我编辑了我的postyes,但是还有更多的xsl:when
将要到来,为了简洁/清晰,我将学习,它(现在神奇地)修复了我的问题