2013-10-29 69 views
0

這裏是我的XML:如何跳過在xsl中沒有節點的記錄?

<node> 
     <siraj>abc</siraj> 
     <shaik>ab</shaik> 
     <basha>si</basha> 
    </node> 
    <node> 
     <siraj>abc</siraj> 
     <shaik>ab</shaik> 
     <basha>si</basha> 
    </node> 
    <node> 
     <siraj>abc</siraj> 
     <basha>si</basha> 
    </node> 
    <node> 
     <siraj>abc</siraj> 
     <shaik>ab</shaik> 
     <basha>si</basha> 
    </node> 
    <node> 
     <siraj>abc</siraj> 
     <basha>si</basha> 
    </node> 

而XSLT:

<xsl:for-each select="//node"> 
    <xsl:if test="not(node/shaik)"> 
    <xsl:value-of select="siraj"/> 
    <xsl:value-of select="basha"/> 
    </xsl:if> 
    <xsl:for-each> 

我有一個xml像上面。我必須跳過沒有<shaik>孩子的節點。我嘗試了使用xsl:for-each,但我無法得到答案。

+0

我認爲你應該做'的而不是 '的'。或者完全移除'xsl:if',並在'xsl:for-each'中過濾 - ' – Pawel

+0

或''跳過沒有「shaik」子節點的節點。 – Fernando

回答

0

查找用於複製整個文檔的identity transform。從那裏,你可以再添加「例外您要添加,刪除或跳過某些元素

這XSLT:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 

<xsl:template match="/"> 
<xsl:apply-templates /> 
</xsl:template> 

<xsl:template match="node[shaik]"/> 

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

應用於此XML文檔:

<nodes> 
    <node> 
     <siraj>abc</siraj> 
     <shaik>ab</shaik> 
     <basha>si</basha> 
    </node> 
    <node> 
     <siraj>abc</siraj> 
     <shaik>ab</shaik> 
     <basha>si</basha> 
    </node> 
    <node> 
     <siraj>abc</siraj> 
     <basha>si</basha> 
    </node> 
    <node> 
     <siraj>abc</siraj> 
     <shaik>ab</shaik> 
     <basha>si</basha> 
    </node> 
    <node> 
     <siraj>abc</siraj> 
     <basha>si</basha> 
    </node> 
</nodes> 

給出了這樣的生成的XML:

<nodes> 
    <node> 
     <siraj>abc</siraj> 
     <basha>si</basha> 
    </node> 
    <node> 
     <siraj>abc</siraj> 
     <basha>si</basha> 
    </node> 
</nodes>