XSL:变量 - 条件检查值是否存在(XSl:Variable - Condition to che

2019-08-16 23:28发布

使用XSLT 1.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>  

预期上述不工作。 我需要的是,如果<RootTag>在我的数据存在,那么该变量应包含以下子节点<RootTag> 如果<RootTag>不存在,则DOC_TYPE应该在我的XML数据的第一个标签。

感谢您的答复。

Answer 1:

在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'就足够了
  • 这样的: <xsl:value-of select="name(*[1])"/>已经导致一个字符串(名称是由定义的字符串),所以没有必要做<xsl:if test="string($DOC_TYPE) = ''"> ,一个简单<xsl:if test="$DOC_TYPE = ''">就足够
  • 以检查是否一个节点存在简单地以经由的XPath选择它test="..."表达-任何非空节点集的计算结果为true
  • XSLT有严格的范围规则。 变量是他们的父元素内有效。 第二个变量(一个内<xsl:if> )将立即超出范围(意味着正好在</xsl:if> )。


Answer 2:

试试这个

   <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>


Answer 3:

它只有在你已经指定它的存在。 没有理由以测试它的存在。

另请参见这里



文章来源: XSl:Variable - Condition to check whether value exist
标签: xslt