Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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
在xsl中连接变量值 XML: XSL:_Xml_Xslt - Fatal编程技术网

在xsl中连接变量值 XML: XSL:

在xsl中连接变量值 XML: XSL:,xml,xslt,Xml,Xslt,在上面的XML中,我想获取值(var1、var2、var3、var6)。将这些值放入变量中。 现在在XSL中,我想使用逗号分隔符连接变量值。但是如果任何一个变量值为空,我会得到多个逗号(,)。基本上,如果变量为空,我必须忽略它。请帮帮我。 我使用的是XSLT1.0如果var1-var4UserValue元素保证在原始XML中以特定的顺序出现,那么对于每个元素都是简单的: XML: <Form id="id8" name="1234_A" accessRefs="#i

在上面的XML中,我想获取值(var1、var2、var3、var6)。将这些值放入变量中。 现在在XSL中,我想使用逗号分隔符连接变量值。但是如果任何一个变量值为空,我会得到多个逗号(,)。基本上,如果变量为空,我必须忽略它。请帮帮我。
我使用的是XSLT1.0

如果
var1
-
var4
UserValue
元素保证在原始XML中以特定的顺序出现,那么对于每个
元素都是简单的

    XML:
        <Form id="id8" name="1234_A" accessRefs="#id4" subType="Form" subClass="Form">  
          <UserData id="id10" type="Attributes">
            <UserValue value="val1" title="var1"></UserValue>
            <UserValue value="val2" title="var2"></UserValue>
            <UserValue value="val3" title="var3"></UserValue>
            <UserValue value="val4" title="var4"></UserValue>    
            <UserValue value="val6" title="var6"></UserValue>
            <UserValue value="val7" title="var7"></UserValue>    
          </UserData>
        </Form>
   XSL: 
    <xsl:variable name="var1" select="$ele/plm:UserData/plm:UserValue[@title='var1']"/>
        <xsl:variable name="var2" select="$ele/plm:UserData/plm:UserValue[@title='var2']"/>
        <xsl:variable name="var3" select="$ele/plm:UserData/plm:UserValue[@title='var3']"/>
        <xsl:variable name="var6" select="$ele/plm:UserData/plm:UserValue[@title='var6']"/>
        <Cell>
          <Data ss:Type="String">
            <xsl:variable name="temp" select="concat($var1/@value,',',$var2/@value,',',$var3/@value,',',$var6/@value)"/>
          </Data>
        </Cell>

如果
var1
-
var4
UserValue
元素保证以该特定顺序出现在原始XML中,那么对于每个
元素都是简单的

    XML:
        <Form id="id8" name="1234_A" accessRefs="#id4" subType="Form" subClass="Form">  
          <UserData id="id10" type="Attributes">
            <UserValue value="val1" title="var1"></UserValue>
            <UserValue value="val2" title="var2"></UserValue>
            <UserValue value="val3" title="var3"></UserValue>
            <UserValue value="val4" title="var4"></UserValue>    
            <UserValue value="val6" title="var6"></UserValue>
            <UserValue value="val7" title="var7"></UserValue>    
          </UserData>
        </Form>
   XSL: 
    <xsl:variable name="var1" select="$ele/plm:UserData/plm:UserValue[@title='var1']"/>
        <xsl:variable name="var2" select="$ele/plm:UserData/plm:UserValue[@title='var2']"/>
        <xsl:variable name="var3" select="$ele/plm:UserData/plm:UserValue[@title='var3']"/>
        <xsl:variable name="var6" select="$ele/plm:UserData/plm:UserValue[@title='var6']"/>
        <Cell>
          <Data ss:Type="String">
            <xsl:variable name="temp" select="concat($var1/@value,',',$var2/@value,',',$var3/@value,',',$var6/@value)"/>
          </Data>
        </Cell>

在连接变量之前,您可以检查该变量是否为非空和非空。基于此,您只能连接那些不为null且不为空的变量。请指出XSLT 1.0或2.0。您真的需要使用这些变量吗?如果在
xsl:for each
指令中对原始节点进行寻址,则会自动排除不存在的节点(这是假设空变量为空,因为它们引用的节点不存在,而不是因为节点本身为空)。嗨,michael。。我已经更新了这个问题。在连接变量之前,请先看一看,可能是您可以检查该变量是否为非空和非空。基于此,您只能连接那些不为null且不为空的变量。请指出XSLT 1.0或2.0。您真的需要使用这些变量吗?如果在
xsl:for each
指令中对原始节点进行寻址,则会自动排除不存在的节点(这是假设空变量为空,因为它们引用的节点不存在,而不是因为节点本身为空)。嗨,michael。。我已经更新了这个问题。请看一看谢谢伊恩。我对[normalize-space()]谓词有一些问题,因为每个元素都没有循环。如果我删除[normalize-space()],它将对所有元素执行。@userksp很抱歉,由于原始问题缺少输入示例,我忽略了一个事实,即您所说的“值”是一个属性,而不是元素的文本内容。现在应该更好了,谢谢你,伊恩。我对[normalize-space()]谓词有一些问题,因为每个元素都没有循环。如果我删除[normalize-space()],它将对所有元素执行。@userksp很抱歉,由于原始问题缺少输入示例,我忽略了一个事实,即您所说的“值”是一个属性,而不是元素的文本内容。这现在应该更有效了。
<xsl:variable name="ordering" select="'|var1|var2|var3|var6|'" />

<xsl:variable name="temp">
  <xsl:for-each select="$ele/plm:UserData/plm:UserValue
       [@title='var1' or @title='var2' or @title='var3' or @title='var6']
       [normalize-space(@value)]">
    <xsl:sort select="
          string-length(substring-before($ordering, concat('|', @title, '|'))"
      data-type="number" />
    <xsl:if test="position() &gt; 1">,</xsl:if>
    <xsl:value-of select="@value" />
  </xsl:for-each>
</xsl:variable>