检查空值并忽略标记XSLT

时间:2017-05-08 06:44:53

标签: xml xslt xslt-2.0

我有一个像下面这样的xml:

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <properties>
    <entry key="user">1234</entry>
    <entry key="name"></entry>
    </properties>

我想检查键“name”的值是否为null,如果为null则忽略完整标记,结果xml应如下所示:

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <properties>
    <entry key="cm:user">1234</entry>
    </properties>

如果不为null,则结果xml应如下所示:

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <properties>
    <entry key="cm:user">1234</entry>
    <entry key="cm:name">sam</entry>
    </properties>

我使用下面的xslt但没有得到所需的输出。

    

<xsl:template match="@key[.='user']">
<xsl:attribute name="key">
        <xsl:value-of select="'cm:user'"/>
    </xsl:attribute>
 </xsl:template>

 <xsl:choose>
 <xsl:when test="@key[.='name'] != ''"> 
  <xsl:template match="@key[.='name']">
 <xsl:attribute name="key">
        <xsl:value-of select="'cm:name'"/>
 </xsl:attribute>
 </xsl:template> 
 </xsl:when>
 <xsl:otherwise>
 <xsl:template match="entry[@key='name']"/>
 </xsl:otherwise>
 </xsl:choose>

 <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
 </xsl:template>

 <xsl:variable name="fileName">
                <xsl:value-of select="base-uri()" />
 </xsl:variable>    

 <xsl:template match="/">         
 <xsl:result-document href="{$fileName}.xml">
    <xsl:apply-templates/>
  </xsl:result-document>
 </xsl:template>

 </xsl:transform>

有人可以帮我解决这个问题,以获得所需的输出xml。

0 个答案:

没有答案