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 XSl:Variable-检查值是否存在的条件_Xslt - Fatal编程技术网

Xslt XSl:Variable-检查值是否存在的条件

Xslt XSl:Variable-检查值是否存在的条件,xslt,Xslt,使用XSLT1.0,如何检查变量中的值是否存在 我最初是从XML数据为变量赋值,然后需要检查它是否存在: <xsl:variable name="DOC_TYPE"> <xsl:value-of select="name(./RootTag/*[1])"/> </xsl:variable> <xsl:if test="string($DOC_TYPE) = ''"> <xsl:variable name="DOC_TYPE">

使用XSLT1.0,如何检查变量中的值是否存在

我最初是从XML数据为变量赋值,然后需要检查它是否存在:

<xsl:variable name="DOC_TYPE">
  <xsl:value-of select="name(./RootTag/*[1])"/>
</xsl:variable>
<xsl:if test="string($DOC_TYPE) = ''">
  <xsl:variable name="DOC_TYPE">
    <xsl:value-of select="name(./*[1])"/>
  </xsl:variable>
</xsl:if>  

上述情况并没有如预期的那样起作用。我需要的是,如果我的数据中存在
,那么变量应该包含
下面的子节点。如果
不存在,则文档类型应该是我的XML数据中的第一个标记


感谢您的回复。

只有您分配了它,它才会存在。没有理由去检验它的存在


另请参见

您不能在XSLT中重新分配变量。变量是不可变的,不能更改其值。永远

这意味着您必须在变量声明中决定它将具有什么值:

<xsl:variable name="DOC_TYPE">
  <xsl:choose>
    <xsl:when test="RootTag">
      <xsl:value-of select="name(RootTag/*[1])" />
    </xsl:when>
    <xsl:otherwise>
      <xsl:value-of select="name(*[1])" />
    </xsl:otherwise>
  </xsl:choose>
</xsl:variable>

其他一些注意事项:

  • 此:
    ”./RootTag“
    是冗余的。默认情况下,每个不以斜杠开头的XPath都是相对的,所以说
    'RootTag'
    就足够了
  • 这:
    已经产生了一个字符串(根据定义,名称就是字符串),因此不需要执行
    ,一个简单的
    就足够了
  • 要检查节点是否存在,只需通过XPath在
    test=“…”
    表达式中选择它-任何非空节点集的计算结果均为
    true
  • XSLT有严格的范围规则。变量仅在其父元素中有效。您的第二个变量(在
    中的变量)将立即超出范围(即位于
    的右侧)
试试这个

   <xsl:variable name="DOC_TYPE">
     <xsl:choose>
       <xsl:when test="/RootTag"><xsl:value-of select="name(/RootTag/*[1])"></xsl:value-of></xsl:when>
       <xsl:otherwise><xsl:value-of select="name(/*[1])"/></xsl:otherwise>
     </xsl:choose>
   </xsl:variable>


谢谢。但我的要求是,有时我得到这样的数据,然后我需要变量名作为顺序。有时我得到这样的数据,没有RootTag,那么我的变量也应该包含值。我如何做到这一点?在您的示例中,变量始终存在,可能是内容不同。但无论如何,既然吉姆·加里森的建议似乎对你有用,我相信你应该接受他的回答。非常感谢。我会尝试这种方式,如果我有问题,请告诉我。