如何控制多个标签不需要再次重复



这里我的目标是xslt中具有CTD_CTD_PKG_ID表的数据,但有些标签的数据与我们必须控制的标签类型完全相同,不能再次重复

<?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>

我已经把xslt写在下面了

<?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 的当前输出

:25:E、:25:E,

预期输出=:25:E,

如果您使用这样的特定ID,一个简单的方法是使用position()函数简单地选择具有匹配ID的第一个TABLE,就像一样

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

请注意,如果需要,您可以通过在表上进行匹配来简化模板匹配。以下是本例中的整个XSLT

<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>

当应用于输入XML时,结果如下:

:25:E,

最新更新