2011-06-22 58 views
1

這裏IM在我的XSLT目標與CTD_CTD_PKG_ID的表中的數據,但一些標籤是具有數據非常相同的是標籤類型,我們必須控制不重複一次如何控制多個標籤不neccessary是再次重複

<?xml version="1.0" standalone="yes"?> 
<NewDataSet> 
<Table> 
<RECORD_TYPE_CODE>CTD</RECORD_TYPE_CODE> 
<MSG_TYPE_CODE>O102</MSG_TYPE_CODE> 
<CTD_SEQ_NUM>089938</CTD_SEQ_NUM>  
<CTD_CTD_PKG_ID>345</CTD_CTD_PKG_ID> 
<CTD_LANG_ID>E</CTD_LANG_ID> 
</Table> 
<Table> 
<RECORD_TYPE_CODE>ITD</RECORD_TYPE_CODE> 
<MSG_TYPE_CODE>O103</MSG_TYPE_CODE> 
<CTD_SEQ_NUM>089939</CTD_SEQ_NUM>  
<CTD_CTD_PKG_ID>345</CTD_CTD_PKG_ID> 
<CTD_LANG_ID>E</CTD_LANG_ID> 
</Table> 
</NewDataSet> 

我寫下面

<?xml version="1.0" encoding="utf-8"?> 

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

<xsl:output method="text" indent="no" omit-xml-declaration="yes" /> 

<xsl:param name="PackageId" /> 
<xsl:template match="/"> 

<xsl:apply-templates select="NewDataSet/Table[CTD_CTD_PKG_ID ='345']"/>  
</xsl:template> 


<xsl:template match="NewDataSet/Table[CTD_CTD_PKG_ID ='345']"> 

<xsl:value-of select= "concat(':25:',./CTD_LANG_ID)"/>,<xsl:text/> 
    <xsl:if test ="./RECORD_TYPE_CODE" > 
     <xsl:if test=" position() &gt; 1"></xsl:if> 
     <xsl:text/><xsl:value-of select= "concat(':20:',./RECORD_TYPE_CODE)" />,<xsl:text/> 
    </xsl:if> 
    <xsl:if test ="./MSG_TYPE_CODE" > 
     <xsl:if test=" position() &gt; 1"></xsl:if> 
     <xsl:text/><xsl:value-of select= "concat(':21:',./MSG_TYPE_CODE)"/>,<xsl:text/> 
    </xsl:if> 
    <xsl:if test ="./CTD_SEQ_NUM" > 
     <xsl:if test=" position() &gt; 1"></xsl:if> 
     <xsl:text/><xsl:value-of select= "concat(':22:',./CTD_SEQ_NUM)"/>,<xsl:text/> 
    </xsl:if>  

</xsl:template> 
</xsl:stylesheet> 

電流輸出我的XSLT此上面的XSLT

:25:E,:25:E,

預期輸出= :25:E,

回答

0

如果使用這樣的特定的ID,一個簡單的方法來做到這一點是簡單地使用所述位置匹配的ID選擇第一表()函數,像這樣

<xsl:apply-templates select="NewDataSet/Table[CTD_CTD_PKG_ID ='345'][position()=1]"/> 

請注意,如果需要,實際上可以通過在表上匹配來簡化模板匹配。下面是在這種情況下

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" indent="no" omit-xml-declaration="yes"/> 
    <xsl:param name="PackageId"/> 
    <xsl:template match="/"> 
     <xsl:apply-templates select="NewDataSet/Table[CTD_CTD_PKG_ID ='345'][position()=1]"/> 
    </xsl:template> 
    <xsl:template match="Table"> 
     <xsl:value-of select="concat(':25:',./CTD_LANG_ID)"/>, 
     <xsl:text/></xsl:template> 
</xsl:stylesheet> 

整個XSLT當你輸入的XML應用,結果如下:

:25:E, 
+0

但我使用該模板中的一些其他標籤只是請我已編輯該模板,如果我使用它可能會導致影響 – pravz

+0

@pravz現在你已經修改了你的XSLT,你的預期輸出在這種情況下仍然是一樣的嗎? –