2016-03-01 13 views
0

我的輸入XML是如下刪除在XML空的子元素,使用XSLT

<OUTPUT-AREA><TIME-CD>A</TIME-CD> 
    <ID-G> 
     <Table-ID-T> 
      <AT-ID-T>YYYX</AT-ID-T> 
      <AT-ID-T/> 
      <AT-ID-T/> 
     </Table-ID-T> 
    </ID-G> 
</OUTPUT-AREA> 

我的輸出XML shoule像,

<OUTPUT-AREA> 
    <TIME-CD>A</TIME-CD> 
    <ID-G> 
     <Table-ID-T> 
      <AT-ID-T>YYYX</AT-ID-T> 
     </Table-ID-T> 
    </ID-G> 
</OUTPUT-AREA> 

我想刪除具有空值只有子元素。在上面的例子中,我想刪除只有空值爲<AT-ID-T>的元素。
但不應刪除Table-ID-T或ID-G。

這裏的一個挑戰是,假設如果所有的子元素都有空值,那麼至少有一個子元素 保留在表或數組中。

例如,輸入XML是

<OUTPUT-AREA> 
    <TIME-CD>A</TIME-CD> 
    <ID-G> 
     <Table-ID-T> 
      <AT-ID-T/> 
      <AT-ID-T/> 
      <AT-ID-T/> 
     </Table-ID-T> 
    </ID-G> 
</OUTPUT-AREA> 

然後輸出應該是這樣的,

<OUTPUT-AREA> 
    <TIME-CD>A</TIME-CD> 
    <ID-G> 
     <Table-ID-T> 
      <AT-ID-T/> 
     </Table-ID-T> 
    </ID-G> 
</OUTPUT-AREA> 

請提供滿足要求的合適XSLT。

請找我試過XSLT下面,

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://ACORD.org/Standards/Life/2"> 
    <xsl:output encoding="UTF-8" indent="no" omit-xml-declaration="no"/> 
    <xsl:template match="/"> 
    <xsl:apply-templates select="*"/> 
    </xsl:template> 
    <xsl:template match="*"> 
    <xsl:if test=".!=''"> 
     <xsl:copy> 
      <xsl:copy-of select="@*"/> 
      <xsl:apply-templates/> 
     </xsl:copy> 
    </xsl:if> 
    </xsl:template> 

在應用上面的XSLT,所有這一切都空值移除的元素。但是我只需要刪除子元素。

+1

等都不是代碼寫作服務。我們很樂意幫助您解決您遇到的任何問題,但您必須向我們展示您迄今爲止的嘗試。 – Matthew

+1

@Mthethew對不起,我同意。我沒有追加我在第一篇文章中嘗試過的XSLT。我現在用我的XSLT更新了這篇文章。請查看 – Rajthilak

回答

0

假設你知道空元素的名稱(例如AT-ID-T)要刪除然後使用

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

    <xsl:output indent="yes"/> 
    <xsl:strip-space elements="*"/> 

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

    <xsl:template match="Table-ID-T[not(AT-ID-T[normalize-space()])]/AT-ID-T[position() > 1] 
         | Table-ID-T[AT-ID-T[normalize-space()]]/AT-ID-T[not(normalize-space())]"/> 

</xsl:transform> 

實施例在線http://xsltransform.net/ej9EGcX用於其他輸入樣本一個輸入採樣和http://xsltransform.net/ej9EGcX/2

+0

謝謝。它工作正常! – Rajthilak

0

我嘗試以下方法和工作:

<xsl:template match="node()[.='']"/> 

<xsl:template match="Table-ID-T/*[1]"> 
    <xsl:copy-of select="."/> 
</xsl:template>