如何根据id条件获取数据是相同的



以下是我在该表下的xml,基于CTD_CTD_PKG_ID(在CTD_CTD-PKG_ID表下有一段时间ID相同,意味着我们需要从两个表中获取数据)这个包ID我们需要在xsl样式表的帮助下生成一个文本文件,但如何在xslt 中编写逻辑代码

对于某些字段,该类型记录的数据是相同的。我不想只重复一次,但如何控制我是否得到两个CTD_LANG_ID的记录,这些记录需要显示一次,但是我已经写了xslt。我认为这是不正确的,当我们有一个xml,其中又有一个表具有不同的包ID(CTD_CTD_PKG_ID)时,LANG ID可能不同于E但是这个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: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:',./TRAN_TYPE_CODE)"/>,<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> 


预期输出

:25:E,:20:CTD,:21:O102N,:22:089938,:20:ITD,:21:O103N,:22-089939,

下面是一个示例样式表:

<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="1.0">
  <xsl:output method="text"/>
  <xsl:param name="packageId" select="345"/>
  <xsl:template match="/">
    <xsl:apply-templates select="NewDataSet/Table[CTD_CTD_PKG_ID = $packageId]"/>
  </xsl:template>
  <xsl:template match="Table">
    <xsl:if test="position() &gt; 1">,</xsl:if>
    <xsl:apply-templates select="RECORD_TYPE_CODE | MSG_TYPE_CODE | CTD_SEQ_NUM"/>
  </xsl:template>
  <xsl:template match="Table/*">
    <xsl:if test="position() &gt; 1">,</xsl:if>
    <xsl:value-of select="."/>
  </xsl:template>
</xsl:stylesheet>

要继续使用您的代码。。。

您正在从错误的上下文开始执行xsl:if测试。模板上下文为Table。此外,xsl:text的使用方式错误。例如,您应该使用更改测试

<xsl:if test="RECORD_TYPE_CODE">
    <xsl:value-of select= "RECORD_TYPE_CODE"/><xsl:text>,</xsl:text>
</xsl:if>

如果您希望在输出中省略空值,如,,。此外,您需要更改最终条件以避免最后一个逗号:

<xsl:if test="CTD_SEQ_NUM">
        <xsl:value-of select= "CTD_SEQ_NUM"/>
            <xsl:if test="count(following-sibling::Table)>0">
                <xsl:text>,</xsl:text>
            </xsl:if>
</xsl:if>

相关内容

  • 没有找到相关文章

最新更新