Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xslt 如何根据id条件获取数据是相同的_Xslt_Xslt 1.0 - Fatal编程技术网

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

Xslt 如何根据id条件获取数据是相同的,xslt,xslt-1.0,Xslt,Xslt 1.0,下面是我在该表下的xml,基于CTD_CTD_PKG_ID(表CTD_CTD_PKG_ID下的一段时间是相同的,意味着我们需要从两个表中获取数据)这个包ID我们需要借助xsl样式表生成一个文本文件,但是如何用xslt编写逻辑代码呢 对于某些字段,该类型记录的数据对我来说是相同的,我不想重复一次,只需要一次,但如何控制如果我得到两条CTD_LANG_ID记录,需要显示一次,但我编写了xslt,我认为这是不正确的,当我们有一个xml和另一个具有不同包ID的表时,我们将失败(CTD_CTD_PKG_I

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


对于某些字段,该类型记录的数据对我来说是相同的,我不想重复一次,只需要一次,但如何控制如果我得到两条CTD_LANG_ID记录,需要显示一次,但我编写了xslt,我认为这是不正确的,当我们有一个xml和另一个具有不同包ID的表时,我们将失败(CTD_CTD_PKG_ID)当时lang ID可能不同于E,但是这个xslt显示了E it本身

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

CTD
O102
089938
345
E
ITD
O103
089939
345
E
我有一个自己编写的XSLT逻辑,但它不起作用

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


,
,
,
,


预期输出


: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: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
测试。模板上下文是
Table
。而且
xsl:text
的使用方式错误。例如,您应该使用以下内容更改测试:

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

我需要为每个类型代码添加一个前缀,您的示例可能会用到这些类型代码,例如:20:CTD,:21:0102,:22:089938,:20:ITD,:21:0103,:22:089939替换单个
模板match=“Table/*”
有三个模板,每种类型的元素节点一个模板,例如记录类型
,然后其他两种元素类型也一样,只需更改每个模板中的concat表达式以输出所需的前缀。honnen我正在使用上面的前缀concatation这是gud现在我们所做的,如果重复任何标记意味着我们获取类似地,例如CTD_LANG_ID在两个表中具有相同的值,那么我只需要在输出数据中使用一次,因此我尝试退出该位置行,即使所有记录都进入数据中。如何控制预期输出,如:E,CTD,0102089938,ITD,0103089939我需要为每个类型代码添加前缀,这是可能的吗使用示例:20:CTD,:21:0102,:22:089938,:20:ITD,:21:0103,:22:089939替换单个
模板match=“Table/*”
有三个模板,每种类型的元素节点一个模板,例如记录类型
,然后其他两种元素类型也一样,只需更改每个模板中的concat表达式以输出所需的前缀。honnen我正在使用上面的前缀concatation这是gud现在我们所做的,如果重复任何标记意味着我们获取类似地,例如CTD_LANG_ID在两个表中具有相同的值,那么我只需要输出数据中的一次,因此我尝试退出该位置行,即使所有记录都进入数据中。如何控制预期输出,例如:E,CTD,0102089938,ITD,0103089939对于某些字段,对于我来说,该类型的记录的数据是相同的我只想重复一次,但如何控制我是否得到两条CTD_LANG_ID记录需要显示一次,但我编写了xslt,我认为这是不正确的,如果我们有xml和一个具有不同包ID(CTD_CTD_PKG_ID)的表,我们将失败当时lang id可能不同于E,但这个xslt显示的是E it本身…对于某些字段,该类型记录的数据是相同的,我不想重复一次,我只需要一次,但如何控制如果我得到两个CTD_lang_id记录,需要显示一次,但我编写了xslt,我认为这是不正确的,我们将f当我们有一个xml和一个以上的具有不同包id(CTD_CTD_PKG_id)的表时,那时lang id可能不同于E,但是这个xslt显示了E it本身。。。