【发布时间】:2011-05-24 20:56:31
【问题描述】:
我希望能再在这里得到帮助。这是我的示例输入 XML:
<Report>
<RecordValues>
<Record>
<FieldValue fieldName="firm_name" fieldValue="Firm_1"/>
<FieldValue fieldName="firm_number" fieldValue="11"/>
<FieldValue fieldName="prepared_by" fieldValue="PARKER"/>
<FieldValue fieldName="contact_number" fieldValue="123456789"/>
<FieldValue fieldName="trade_date" fieldValue="2010-10-17"/>
<FieldValue fieldName="symbol" fieldValue="ADM"/>
</Record>
<Record>
<FieldValue fieldName="firm_name" fieldValue="Firm_1"/>
<FieldValue fieldName="firm_number" fieldValue="11"/>
<FieldValue fieldName="prepared_by" fieldValue="PARKER"/>
<FieldValue fieldName="contact_number" fieldValue="123456789"/>
<FieldValue fieldName="trade_date" fieldValue="2010-10-16"/>
<FieldValue fieldName="symbol" fieldValue="ACW"/>
</Record>
<Record>
<FieldValue fieldName="firm_name" fieldValue="Firm_2"/>
<FieldValue fieldName="firm_number" fieldValue="12"/>
<FieldValue fieldName="prepared_by" fieldValue="EDWARDS"/>
<FieldValue fieldName="contact_number" fieldValue="123456780"/>
<FieldValue fieldName="trade_date" fieldValue="2010-10-19"/>
<FieldValue fieldName="symbol" fieldValue="ADS"/>
</Record>
</RecordValues>
</Report>
这是我需要得到的输出:
A Firm_1 11
B PARKER 123456789
C 2010-10-17 ADM
C 2010-10-16 ACW
T 4
A Firm_2 12
B EDWARDS 123456780
C 2010-10-19 ADS
T 3
如您所见,我需要按“公司名称”或“公司编号”对记录进行分组。每个组必须有一个“A”类型的记录、一个“B”类型的记录和多个“C”类型的记录。记录“T”是没有记录“T”的每个组的总和。输入 XML 已排序。我发现 Muenchian Method 正在对记录进行分组,但没有成功。显然我做错了什么。这是我写的 XSLT:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:key name="value-by-firm" match="Report/RecordValues/Record/FieldValue" use="firm_number"/>
<xsl:template match="Record">
<xsl:for-each select="FieldValue/@fieldValue[count(. | key('value-by-firm', firm_number))]">
<xsl:text>A </xsl:text>
<xsl:value-of select="firm_name"/>
<xsl:text> </xsl:text>
<xsl:value-of select="firm_number"/>
<xsl:text>
</xsl:text>
<xsl:text>B </xsl:text>
<xsl:value-of select="prepared_by"/>
<xsl:text> </xsl:text>
<xsl:value-of select="contact_number"/>
<xsl:text>
</xsl:text>
<xsl:for-each select="key('value-by-firm', firm_number)">
<xsl:text>C </xsl:text>
<xsl:value-of select="trade_date"/>
<xsl:text> </xsl:text>
<xsl:value-of select="symbol"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
也许还有另一种方法可以做到这一点。提前致谢。
【问题讨论】:
-
这没有任何意义!什么是“A 类记录”、“B 类记录”、“C 类记录”、“T 类记录”?总计有哪些值?
-
@Dimitre Novatchev:这只是硬编码的记录标识符。
-
总数应该显示一个公司的记录数,而不是总数。
-
@klipa:在您的 XML 中,我没有看到任何这样的硬编码记录标识符。请编辑问题并使其有意义。
-
@klipa:请编辑您的问题并解释现在缺少的所有内容。此外,更正预期输出:T 的值必须是 2 和 1。
标签: xml xslt muenchian-grouping