как управлять несколькими тегами не обязательно, чтобы повторить еще раз - PullRequest
1 голос
/ 22 июня 2011

здесь я нацеливаюсь на данные с таблицей CTD_CTD_PKG_ID в моем xslt, но некоторые теги имели данные, почти такие же, как тип тегов, который мы должны контролировать, чтобы не повторять еще раз

<?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: Е: 25: Е

Ожидаемый результат = : 25: E

1 Ответ

0 голосов
/ 22 июня 2011

Если вы используете такие конкретные идентификаторы, простой способ сделать это - просто выбрать первую ТАБЛИЦУ с соответствующим идентификатором, используя функцию position (), например:

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