如何在xslt中进行嵌套分组
How to do nesting grouping in xslt
下面是xml
<Report>
<ReportBody>
<Level type="Assessment-Area" name="Etch">
<Level type="Issue" Issue-Severity="Critical">
<Level type="Issue" Issue-Severity="Critical">
<Level type="Issue" Issue-Severity="Critical">
<Level type="Checklist" name="CEDM - IPC Rules::High-Dense">
<Level type="Action" name="Padstack Analysis (High-Dense)" Checklist="CEDM - IPC Rules::High-Dense" Model="High-Dense">
<Level type="Category" name="abc" Range="*:via2toep;XX_w = 4.675 4.921 5.167 ">
<Measurement LocationY="5.9547242" Layer="signal_1" Net1="$NONE$" name="CEDM - IPC Rules::High-Dense-11-signal_1-127--1-42" Component2="U56" Overview="some value" image="some_base 64 code">
</Measurement>
</Level>
</Level>
</Level>
</Level>
</Level>
</Level>
<Level type="Issue" Issue-Severity="Critical">
<Level type="Issue" Issue-Severity="Critical">
<Level type="Issue" Issue-Severity="Critical">
<Level type="Checklist" name="CEDM - IPC Rules::High-Dense">
<Level type="Action" name="Padstack Analysis (High-Dense)" Checklist="CEDM - IPC Rules::High-Dense" Model="High-Dense">
<Level type="Category" name="xyz" Range="*:via2toep;XX_w = 4.675 4.921 5.167 ">
<Measurement LocationY="5.9547242" Layer="signal_2" Net1="$NONE$" name="CEDM - IPC Rules::High-Dense-11-signal_1-127--1-42" Component2="U56" Overview="some value" image="some_base 64 code">
</Measurement>
</Level>
</Level>
</Level>
</Level>
</Level>
</Level>
<Level type="Issue" Issue-Severity="Critical">
<Level type="Issue" Issue-Severity="Critical">
<Level type="Issue" Issue-Severity="Critical">
<Level type="Checklist" name="CEDM - IPC Rules::High-Dense">
<Level type="Action" name="Padstack Analysis (High-Dense)" Checklist="CEDM - IPC Rules::High-Dense" Model="High-Dense">
<Level type="Category" name="abc" Range="*:via2toep;XX_w = 4.675 4.921 5.167 ">
<Measurement LocationY="5.9547242" Layer="signal_2" Net1="$NONE$" name="CEDM - IPC Rules::High-Dense-11-signal_1-127--1-42" Component2="U56" Overview="some value" image="some_base 64 code">
</Measurement>
</Level>
</Level>
</Level>
</Level>
</Level>
</Level>
<Level type="Issue" Issue-Severity="Critical">
<Level type="Issue" Issue-Severity="Critical">
<Level type="Issue" Issue-Severity="Critical">
<Level type="Checklist" name="CEDM - IPC Rules::High-Dense">
<Level type="Action" name="Padstack Analysis (High-Dense)" Checklist="CEDM - IPC Rules::High-Dense" Model="High-Dense">
<Level type="Category" name="xyz" Range="*:via2toep;XX_w = 4.675 4.921 5.167 ">
<Measurement LocationY="5.9547242" Layer="signal_2" Net1="$NONE$" name="i" Component2="U56" Overview="some value" image="some_base 64 code">
</Measurement>
</Level>
</Level>
</Level>
</Level>
</Level>
</Level>
</Level>
</ReportBody>
</Report>
我是 xslt 的新手。所以我尝试了在 google 上找到的几种方法。但它不工作。
我想对 "Measurement" 标签中出现的所有 base 64 图像进行分组
然后将那些在 "Level" 标签内具有相同 "name" 属性 的图像分组,这些图像出现在 "Measurement" 标签的正上方。
您需要的输出不太清楚,但这是一个示例,您可以在其中获得按父级名称分组的测量值。
然后我只是复制了 Measurement 节点,但是你可以选择只保留你需要的属性。
<xsl:template match="/">
<xsl:for-each-group select="//Measurement" group-by="../@name">
<xsl:element name="Level">
<xsl:attribute name="name" select="current-grouping-key()"/>
<xsl:for-each select="current-group()">
<xsl:copy-of select="current()"/>
</xsl:for-each>
</xsl:element>
</xsl:for-each-group>
</xsl:template>
下面是xml
<Report>
<ReportBody>
<Level type="Assessment-Area" name="Etch">
<Level type="Issue" Issue-Severity="Critical">
<Level type="Issue" Issue-Severity="Critical">
<Level type="Issue" Issue-Severity="Critical">
<Level type="Checklist" name="CEDM - IPC Rules::High-Dense">
<Level type="Action" name="Padstack Analysis (High-Dense)" Checklist="CEDM - IPC Rules::High-Dense" Model="High-Dense">
<Level type="Category" name="abc" Range="*:via2toep;XX_w = 4.675 4.921 5.167 ">
<Measurement LocationY="5.9547242" Layer="signal_1" Net1="$NONE$" name="CEDM - IPC Rules::High-Dense-11-signal_1-127--1-42" Component2="U56" Overview="some value" image="some_base 64 code">
</Measurement>
</Level>
</Level>
</Level>
</Level>
</Level>
</Level>
<Level type="Issue" Issue-Severity="Critical">
<Level type="Issue" Issue-Severity="Critical">
<Level type="Issue" Issue-Severity="Critical">
<Level type="Checklist" name="CEDM - IPC Rules::High-Dense">
<Level type="Action" name="Padstack Analysis (High-Dense)" Checklist="CEDM - IPC Rules::High-Dense" Model="High-Dense">
<Level type="Category" name="xyz" Range="*:via2toep;XX_w = 4.675 4.921 5.167 ">
<Measurement LocationY="5.9547242" Layer="signal_2" Net1="$NONE$" name="CEDM - IPC Rules::High-Dense-11-signal_1-127--1-42" Component2="U56" Overview="some value" image="some_base 64 code">
</Measurement>
</Level>
</Level>
</Level>
</Level>
</Level>
</Level>
<Level type="Issue" Issue-Severity="Critical">
<Level type="Issue" Issue-Severity="Critical">
<Level type="Issue" Issue-Severity="Critical">
<Level type="Checklist" name="CEDM - IPC Rules::High-Dense">
<Level type="Action" name="Padstack Analysis (High-Dense)" Checklist="CEDM - IPC Rules::High-Dense" Model="High-Dense">
<Level type="Category" name="abc" Range="*:via2toep;XX_w = 4.675 4.921 5.167 ">
<Measurement LocationY="5.9547242" Layer="signal_2" Net1="$NONE$" name="CEDM - IPC Rules::High-Dense-11-signal_1-127--1-42" Component2="U56" Overview="some value" image="some_base 64 code">
</Measurement>
</Level>
</Level>
</Level>
</Level>
</Level>
</Level>
<Level type="Issue" Issue-Severity="Critical">
<Level type="Issue" Issue-Severity="Critical">
<Level type="Issue" Issue-Severity="Critical">
<Level type="Checklist" name="CEDM - IPC Rules::High-Dense">
<Level type="Action" name="Padstack Analysis (High-Dense)" Checklist="CEDM - IPC Rules::High-Dense" Model="High-Dense">
<Level type="Category" name="xyz" Range="*:via2toep;XX_w = 4.675 4.921 5.167 ">
<Measurement LocationY="5.9547242" Layer="signal_2" Net1="$NONE$" name="i" Component2="U56" Overview="some value" image="some_base 64 code">
</Measurement>
</Level>
</Level>
</Level>
</Level>
</Level>
</Level>
</Level>
</ReportBody>
</Report>
我是 xslt 的新手。所以我尝试了在 google 上找到的几种方法。但它不工作。
我想对 "Measurement" 标签中出现的所有 base 64 图像进行分组 然后将那些在 "Level" 标签内具有相同 "name" 属性 的图像分组,这些图像出现在 "Measurement" 标签的正上方。
您需要的输出不太清楚,但这是一个示例,您可以在其中获得按父级名称分组的测量值。
然后我只是复制了 Measurement 节点,但是你可以选择只保留你需要的属性。
<xsl:template match="/">
<xsl:for-each-group select="//Measurement" group-by="../@name">
<xsl:element name="Level">
<xsl:attribute name="name" select="current-grouping-key()"/>
<xsl:for-each select="current-group()">
<xsl:copy-of select="current()"/>
</xsl:for-each>
</xsl:element>
</xsl:for-each-group>
</xsl:template>