zoukankan      html  css  js  c++  java
  • xslt/xpath对不存在属性的判断问题

    有xml片段如下
    <test>
    <mytag title="good" name="kankan"/>
    <mytag name="xiangxiang"/>
    </test>
     
    写xsl片段如下
     
    <xsl:for-each select="/test/mytag">
    <xsl:if test="@title != 'bad'">
    <xsl:value-of select="@name"/>
    </xsl:if>
    </xsl:for-each>
     
    本意是查找所有属性title不等于bad的mytag,然后输出它的name。
    原来以为会输出:
    kankan
    xiangxiang
     
    结果只会输出
    kankan
     
    原因貌似xslt1.0中对于<xsl:if test="@title != 'bad'">,如果@title不存在,将直接认为判断失败而返回。哪怕交换顺序,写成test="'bad' != $title"也不行。
     
    后来改成
    <xsl:variable name="mytitle" select="concat('fakebad', @title)"/>
    <xsl:if test="$mytitle != 'fakebad'">
    即可
    xml、xslt完整代码:
    <?xml version="1.0" encoding="utf-8"?>
    <!-- Edited with XML Spy v2007 (http://www.altova.com) -->
    <test>
      <mytag title="good" name="kankan22"/>
      <mytag name="xiangxiang"/>
    </test>
    <?xml version="1.0" encoding="utf-8"?>
    
    <!-- Edited with XML Spy v2007 (http://www.altova.com) -->
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
        <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/>
      <xsl:template match="/">
        <xsl:for-each select="/test/mytag">
          <xsl:variable name="mytitle" select="concat('fakebad', @title)"/>
          <xsl:if test="$mytitle != 'fakebad'">
           name: <xsl:value-of select="@name"/>
            title: <xsl:value-of select="@title"/>
            mytitle: <xsl:value-of select="$mytitle"/>
            <br></br>
          </xsl:if>
        </xsl:for-each>
      </xsl:template>
    </xsl:stylesheet>
  • 相关阅读:
    ubuntu装openssh-client和openssh-server
    路由器开源系统openwrt配置页面定制
    linux 串口接收
    SHA算法
    密码学Hash函数
    椭圆曲线加密
    ElGamal密码
    Diffie-Hellman密钥交换
    RSA加密
    公钥密码学
  • 原文地址:https://www.cnblogs.com/lijianhong90/p/5190178.html
Copyright © 2011-2022 走看看