【问题标题】:XSL Grouping not giving any resultXSL 分组没有给出任何结果
【发布时间】:2019-09-17 05:21:33
【问题描述】:

我想在“零:PosNo”上分组 如果我删除组命令,它会返回一个结果,但显然它会返回:

INSERT INTO RAPP_ADM.MTO_POS_IMP_TAB (PROJECT_NO, MTO_OWNER_NO, POS_NO, PART_NO, DESCRIPTION, QTY, UNIT, TOT_LEN, TOT_WEIGHT, DRAWING, GRADE, TRACE, BI_PRODUCT, SURFACE, CALC, DISCIPLINE, MADE_BY, POS_NO2, PLT_SEQ, OBJECT_SQ, OBJECT_REVISION) 
VALUES ('6111', '26-0008-R552-MOD-01-M', '1','PIP03D1160', 'PIPE sch.160 ASTM A790 UNS S31', 2.000, 'M', 2.000, 42.700, 'C097-RWP-L-XN-0057-01', 'sch.160 ASTM A790 UNS S31', 'N', '26-0008-R552-MOD-01-1', 0.559, 'N', 'L', 'sindre.thompson', '', 721, '1556750', '1');

INSERT INTO RAPP_ADM.MTO_POS_IMP_TAB (PROJECT_NO, MTO_OWNER_NO, POS_NO, PART_NO, DESCRIPTION, QTY, UNIT, TOT_LEN, TOT_WEIGHT, DRAWING, GRADE, TRACE, BI_PRODUCT, SURFACE, CALC, DISCIPLINE, MADE_BY, POS_NO2, PLT_SEQ, OBJECT_SQ, OBJECT_REVISION) VALUES 
('6111', '26-0008-R552-MOD-01-M', '1','PIP03D1160', 'PIPE sch.160 ASTM A790 UNS S31', 0.660, 'M', 0.660, 14.093, 'C097-RWP-L-XN-0057-01', 'sch.160 ASTM A790 UNS S31', 'N', '26-0008-R552-MOD-01-1', 0.184, 'N', 'L', 'sindre.thompson', '', 721, '1556750', '1');

xmlns:zero="rosenbergverft.com:3D/2011/Zero"

   <xsl:output method="text" omit-xml-declaration="yes" standalone="no" media-type="text/plain"/>
   <xsl:template match="/">
 
<xsl:for-each select="/zero:Zero/zero:MTOOwner/zero:DocumentNo/zero:BiProduct/zero:Part">
<xsl:for-each-group select="/" group-by="zero:POS_NO">
<xsl:sort select="zero:PosNo" />
INSERT INTO RAPP_ADM.MTO_POS_IMP_TAB (PROJECT_NO, MTO_OWNER_NO, POS_NO, PART_NO, DESCRIPTION, QTY, UNIT, TOT_LEN, TOT_WEIGHT, DRAWING, GRADE, TRACE, BI_PRODUCT, SURFACE, CALC, DISCIPLINE, MADE_BY, POS_NO2, PLT_SEQ, OBJECT_SQ, OBJECT_REVISION) VALUES ('
<xsl:value-of select="../../../../pdms:PDMSProject/pdms:ProjectNumber/@text" />', 
'<xsl:value-of select="zero:MtoOwnerNo" />', 
'<xsl:value-of select="zero:PosNo" />',
'<xsl:value-of select="zero:StockNo" />', 
'<xsl:value-of select="zero:Description" />', 
<xsl:choose>
  <xsl:when test="zero:Quantity/@unit = 'mm2'"><xsl:value-of select="format-number(zero:Quantity/@number div 1000000, '#0.000')"/><xsl:text>, 'M2'</xsl:text></xsl:when>
  <xsl:when test="zero:Quantity/@unit = 'mm'"><xsl:value-of select="format-number(zero:Quantity/@number div 1000, '#0.000')"/><xsl:text>, 'M'</xsl:text></xsl:when>
  <xsl:when test="zero:Quantity/@unit = 'pcs'"><xsl:value-of select="format-number(zero:Quantity/@number, '#0')"/><xsl:text>, 'EA'</xsl:text></xsl:when>
  <xsl:otherwise><xsl:value-of select="format-number(zero:Quantity/@number, '#0.000')"/><xsl:text>, ''</xsl:text></xsl:otherwise>
</xsl:choose>, 
<xsl:value-of select="format-number(zero:TotalLength/@number div 1000, '#0.000')" />, 
<xsl:value-of select="zero:TotalWeight/@number" />, 
'<xsl:value-of select="zero:DocumentNo" />', '<xsl:value-of select="zero:Grade" />', 
<xsl:choose>
  <xsl:when test="zero:Traceable/@boolean = 'false'"><xsl:text>'N'</xsl:text></xsl:when>
  <xsl:otherwise><xsl:text>'Y'</xsl:text></xsl:otherwise>
  </xsl:choose>, 
  '<xsl:value-of select="zero:BiProduct" />', 
  <xsl:value-of select="format-number(zero:Surface/@number div 1000000, '#0.000')" />, 
  '<xsl:value-of select="zero:Calc" />', '<xsl:value-of select="zero:Discipline" />', 
  '<xsl:value-of select="zero:Designer" />', '<xsl:value-of select="zero:Name" />',
  <xsl:value-of select="../../../zero:PlantSeq/@number" />, '<xsl:value-of select="../../../zero:ObjectSeq/@number" />',
  '<xsl:value-of select="../../../zero:ObjectRev" />');
  </xsl:for-each-group>
  </xsl:for-each>

这就是我想要实现的目标: 我希望汇总 PosNo 1 上的数字,以便它只返回 PosNo 1 的一个插入,而不是两个。 Posno 2、3 等也是如此。

INSERT INTO RAPP_ADM.MTO_POS_IMP_TAB (PROJECT_NO, MTO_OWNER_NO, POS_NO, PART_NO, DESCRIPTION, QTY, UNIT, TOT_LEN, TOT_WEIGHT, DRAWING, GRADE, TRACE, BI_PRODUCT, SURFACE, CALC, DISCIPLINE, MADE_BY, POS_NO2, PLT_SEQ, OBJECT_SQ, OBJECT_REVISION) VALUES 
('6111', '26-0008-R552-MOD-01-M', '1','PIP03D1160', 'PIPE sch.160 ASTM A790 UNS S31', 2.66, 'M', 2.66, 56.793, 'C097-RWP-L-XN-0057-01', 'sch.160 ASTM A790 UNS S31', 'N', '26-0008-R552-MOD-01-1', 0.559, 'N', 'L', 'sindre.thompson', '', 721, '1556750', '1');
 

我不知道我做错了什么。我犯了什么明显的错误吗?

【问题讨论】:

  • 请发布一个可重现示例,包括输入、完整 XSLT 样式表和预期输出 - 请参阅:minimal reproducible example
  • “如果我删除组命令,它会返回一个结果,” 你确定你的处理器支持 XSLT 2.0 吗?

标签: xslt plsql xslt-grouping


【解决方案1】:

我猜不是

<xsl:for-each select="/zero:Zero/zero:MTOOwner/zero:DocumentNo/zero:BiProduct/zero:Part">
<xsl:for-each-group select="/" group-by="zero:POS_NO">
<xsl:sort select="zero:PosNo" />

你想要的

<xsl:for-each-group select="/zero:Zero/zero:MTOOwner/zero:DocumentNo/zero:BiProduct/zero:Part" group-by="zero:POS_NO">
  <xsl:sort select="current-grouping-key()" />

但这是一个猜测,请向我们展示您的输入结构和所需的结果结构。

【讨论】:

  • 我试过这个,但它仍然没有返回任何东西。我改进了我的帖子,更好地解释了我想要实现的目标
  • @SindreThompson,请显示相关的 XML 输入结构。
【解决方案2】:
<xsl:for-each-group select="/">

一定是错的,因为“/”选择了单个节点,对单个节点进行分组是没有用的。

但是没有看到输入的 XML,很难告诉你应该写什么。

【讨论】:

  • 我同意在大多数情况下&lt;xsl:for-each-group select="/" group-by="zero:POS_NO"&gt; 没有意义,因为主输入根节点不会指向多个zero:POS_NO,但我不同意“将单个节点分组永远不会有用",因为 XSLT 的 group-by 允许单个项目属于多个组,所以我偶尔会通过后代值的键对单个节点进行分组,例如在 stackoverflow.com/a/57828105/252228 中我就这样做了。
  • 这当然是创新!
猜你喜欢
  • 2017-12-23
  • 2014-01-15
  • 1970-01-01
  • 1970-01-01
  • 2019-08-07
  • 1970-01-01
  • 2018-06-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多