Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xslt 用子树填充变量_Xslt - Fatal编程技术网

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
将要到来,为了简洁/清晰,我将学习
,它(现在神奇地)修复了我的问题