Tôi đang phải vật lộn với các khái niệm về nhóm (trên nhiều phím) của bảng dựa trên XML để hệ thống phân cấp với XSLTnhóm trên các yếu tố trong chuyển đổi XML với XSLT
Các nhóm được dựa trên bốn yếu tố đầu tiên, tuy nhiên nhóm phải ngắt nếu có một phần tử khác nằm giữa tập hợp.
Nguồn XML:
<RECORDS>
<RECORD>
<E1>MICKEY</E1>
<E2>TEST</E2>
<E4>14</E4>
<E5>196</E5>
<F1>A1</F1>
</RECORD>
<RECORD>
<E1>MICKEY</E1>
<E2>TEST</E2>
<E4>14</E4>
<E5>196</E5>
<F1>A2</F1>
</RECORD>
<RECORD>
<E1>MICKEY</E1>
<E2>TEST</E2>
<E4>14</E4>
<E5>195</E5>
<F1>A3</F1>
</RECORD>
<RECORD>
<E1>MICKEY</E1>
<E2>TEST</E2>
<E4>14</E4>
<E5>196</E5>
<F1>A4</F1>
</RECORD>
<RECORD>
<E1>MICKEY</E1>
<E2>TEST</E2>
<E4>14</E4>
<E5>196</E5>
<F1>A5</F1>
</RECORD>
<RECORD>
<E1>DONALD</E1>
<E2>TEST</E2>
<E4>14</E4>
<E5>196</E5>
<F1>A6</F1>
</RECORD>
<RECORD>
<E1>DONALD</E1>
<E2>TEST</E2>
<E4>14</E4>
<E5>196</E5>
<F1>A7</F1>
</RECORD>
</RECORDS>
Output XML
<RECORDS>
<RECORD>
<E1>MICKEY</E1>
<E2>TEST</E2>
<E4>14</E4>
<E5>196</E5>
<F>
<F1>A1</F1>
<F1>A2</F1>
</F>
</RECORD>
<RECORD>
<E1>MICKEY</E1>
<E2>TEST</E2>
<E4>14</E4>
<E5>195</E5>
<F>
<F1>A3</F1>
<F1>A4</F1>
</F>
</RECORD>
<RECORD>
<E1>MICKEY</E1> <!--Must break and not merge in first group -->
<E2>TEST</E2>
<E4>14</E4>
<E5>196</E5>
<F>
<F1>A5</F1>
</F>
</RECORD>
<RECORD>
<E1>DONALD</E1>
<E2>TEST</E2>
<E4>14</E4>
<E5>196</E5>
<F>
<F1>A6</F1>
<F1>A7</F1>
</F>
</RECORD>
</RECORDS>
Đây là XSL tôi đã đưa ra cho đến nay ...
<?xml version="1.0"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:key name="grouped" match="RECORD"
use="concat(E1, '+', E2, '+', E4 , '+', E5)"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/*">
<RECORDS>
<xsl:apply-templates select=
"RECORD[generate-id()
=
generate-id(key('grouped',
concat(E1, '+', E2, '+', E4 , '+', E5)
)
[1]
)
]
"/>
</RECORDS>
</xsl:template>
<xsl:template match="RECORD">
<RECORD>
<E1><xsl:value-of select="E1"/></E1>
<E2><xsl:value-of select="E2"/></E2>
<E4><xsl:value-of select="E4"/></E4>
<F>
<xsl:for select="F1">
<F1><xsl:value-of select="F1"/></F1>
</xsl:for>
</F>
</RECORD>
</xsl:template>
</xsl:stylesheet>
Vấn đề là tôi không thể tạo ra gãi trong thẻ cho mỗi f1. Ngoài ra tôi sẽ nhận được 4 bộ HỒ SƠ, không phải 3 mà tôi nhận được với điều này.
<RECORDS>
<RECORD>
<E1>MICKEY</E1>
<E2>TEST</E2>
<E4>14</E4>
<F></F>
</RECORD>
<RECORD>
<E1>MICKEY</E1>
<E2>TEST</E2>
<E4>14</E4>
<F></F>
</RECORD>
<RECORD>
<E1>DONALD</E1>
<E2>TEST</E2>
<E4>14</E4>
<F></F>
</RECORD>
</RECORDS>
Vui lòng xác định độ khó của bạn - tốt nhất là đăng nỗ lực của bạn để chúng tôi có thể khắc phục. –