[英]Text output from XML with XSLT with grouping
I have a problem I cannot solve.我有一个我无法解决的问题。
For each layer grouped by STRAT_ZONE the minimal values from DEPTHFROM_ZONE and maximum value DEPTHTO_ZONE are needed.对于按 STRAT_ZONE 分组的每一层,需要来自 DEPTHFROM_ZONE 的最小值和最大值 DEPTHTO_ZONE。
Grouping by STRAT_ZONE seems not an option, because the attribute can repeat itself.按 STRAT_ZONE 分组似乎不是一种选择,因为该属性可以重复自身。 A checkup line by line was an idea.
逐行检查是一个想法。
Does anyone have any tips, how to try reach the desired goal?有没有人有任何提示,如何尝试达到预期的目标?
Datablock:数据块:
<ZONE STRAT_ZONE="Flysand unchained" DEPTHFROM_ZONE="0.00" DEPTHTO_ZONE="0.30" INDEX_ZONE="-1"/>
<ZONE STRAT_ZONE="Flysand unchained" DEPTHFROM_ZONE="0.30" DEPTHTO_ZONE="1.10" INDEX_ZONE="-1"/>
<ZONE STRAT_ZONE="Flysand unchained" DEPTHFROM_ZONE="1.10" DEPTHTO_ZONE="1.40" INDEX_ZONE="-1"/>
<ZONE STRAT_ZONE="Flysand unchained" DEPTHFROM_ZONE="1.40" DEPTHTO_ZONE="1.70" INDEX_ZONE="-1"/>
<ZONE STRAT_ZONE="Drifting sand" DEPTHFROM_ZONE="1.70" DEPTHTO_ZONE="1.80" INDEX_ZONE="-1"/>
<ZONE STRAT_ZONE="Drifting sand" DEPTHFROM_ZONE="1.80" DEPTHTO_ZONE="2.20" INDEX_ZONE="-1"/>
<ZONE STRAT_ZONE="Drifting sand" DEPTHFROM_ZONE="2.20" DEPTHTO_ZONE="2.60" INDEX_ZONE="-1"/>
<ZONE STRAT_ZONE="Flysand unchained" DEPTHFROM_ZONE="2.60" DEPTHTO_ZONE="2.80" INDEX_ZONE="-1"/>
<ZONE STRAT_ZONE="Flysand unchained" DEPTHFROM_ZONE="2.80" DEPTHTO_ZONE="2.90" INDEX_ZONE="-1"/>
<ZONE STRAT_ZONE="Drifting sand" DEPTHFROM_ZONE="2.90" DEPTHTO_ZONE="3.10" INDEX_ZONE="-1"/>
<ZONE STRAT_ZONE="Drifting sand" DEPTHFROM_ZONE="3.10" DEPTHTO_ZONE="3.40" INDEX_ZONE="-1"/>
<ZONE STRAT_ZONE="Drifting sand" DEPTHFROM_ZONE="3.40" DEPTHTO_ZONE="3.70" INDEX_ZONE="-1"/>
<ZONE STRAT_ZONE="Drifting sand" DEPTHFROM_ZONE="3.70" DEPTHTO_ZONE="4.50" INDEX_ZONE="-1"/>
<ZONE STRAT_ZONE="Drifting sand" DEPTHFROM_ZONE="4.50" DEPTHTO_ZONE="4.90" INDEX_ZONE="-1"/>
<ZONE STRAT_ZONE="Vulcanic" DEPTHFROM_ZONE="4.90" DEPTHTO_ZONE="6.00" INDEX_ZONE="-1"/>
<ZONE STRAT_ZONE="Vulcanic" DEPTHFROM_ZONE="6.00" DEPTHTO_ZONE="6.20" INDEX_ZONE="-1"/>
<ZONE STRAT_ZONE="Vulcanic" DEPTHFROM_ZONE="6.20" DEPTHTO_ZONE="6.30" INDEX_ZONE="-1"/>
Desired output:所需的 output:
ZONE "Flysand unchained" 0.00 1.70 -1
ZONE "Drifting sand" 1.70 2.60 -1
ZONE "Flysand unchained" 2.60 2.90 -1
ZONE "Drifting sand" 2.90 4.90 -1
ZONE "Vulcanic" 4.90 6.30 -1
Thank you very much.非常感谢。
EDIT: the short XML part I try to convert:编辑:我尝试转换的短 XML 部分:
<ZONES>
<ZONE STRAT_ZONE="Flysand unchained" DEPTHFROM_ZONE="0.00" DEPTHTO_ZONE="0.30" INDEX_ZONE="-1"/>
<ZONE STRAT_ZONE="Flysand unchained" DEPTHFROM_ZONE="0.30" DEPTHTO_ZONE="1.10" INDEX_ZONE="-1"/>
<ZONE STRAT_ZONE="Flysand unchained" DEPTHFROM_ZONE="1.10" DEPTHTO_ZONE="1.40" INDEX_ZONE="-1"/>
<ZONE STRAT_ZONE="Flysand unchained" DEPTHFROM_ZONE="1.40" DEPTHTO_ZONE="1.70" INDEX_ZONE="-1"/>
<ZONE STRAT_ZONE="Drifting sand" DEPTHFROM_ZONE="1.70" DEPTHTO_ZONE="1.80" INDEX_ZONE="-1"/>
<ZONE STRAT_ZONE="Drifting sand" DEPTHFROM_ZONE="1.80" DEPTHTO_ZONE="2.20" INDEX_ZONE="-1"/>
<ZONE STRAT_ZONE="Drifting sand" DEPTHFROM_ZONE="2.20" DEPTHTO_ZONE="2.60" INDEX_ZONE="-1"/>
<ZONE STRAT_ZONE="Flysand unchained" DEPTHFROM_ZONE="2.60" DEPTHTO_ZONE="2.80" INDEX_ZONE="-1"/>
<ZONE STRAT_ZONE="Flysand unchained" DEPTHFROM_ZONE="2.80" DEPTHTO_ZONE="2.90" INDEX_ZONE="-1"/>
<ZONE STRAT_ZONE="Drifting sand" DEPTHFROM_ZONE="2.90" DEPTHTO_ZONE="3.10" INDEX_ZONE="-1"/>
<ZONE STRAT_ZONE="Drifting sand" DEPTHFROM_ZONE="3.10" DEPTHTO_ZONE="3.40" INDEX_ZONE="-1"/>
<ZONE STRAT_ZONE="Drifting sand" DEPTHFROM_ZONE="3.40" DEPTHTO_ZONE="3.70" INDEX_ZONE="-1"/>
<ZONE STRAT_ZONE="Drifting sand" DEPTHFROM_ZONE="3.70" DEPTHTO_ZONE="4.50" INDEX_ZONE="-1"/>
<ZONE STRAT_ZONE="Drifting sand" DEPTHFROM_ZONE="4.50" DEPTHTO_ZONE="4.90" INDEX_ZONE="-1"/>
<ZONE STRAT_ZONE="Vulcanic" DEPTHFROM_ZONE="4.90" DEPTHTO_ZONE="6.00" INDEX_ZONE="-1"/>
<ZONE STRAT_ZONE="Vulcanic" DEPTHFROM_ZONE="6.00" DEPTHTO_ZONE="6.20" INDEX_ZONE="-1"/>
<ZONE STRAT_ZONE="Vulcanic" DEPTHFROM_ZONE="6.20" DEPTHTO_ZONE="6.30" INDEX_ZONE="-1"/>
</ZONES>
The first try to get it as text, but without grouping:第一次尝试将其作为文本获取,但没有分组:
<xsl:output method="text" version="1.0" indent="yes" />
<xsl:template match="ZONES|ZONE">
<xsl:for-each select="ZONE">
<xsl:if test="@STRAT_ZONE !=''">
<xsl:text>ZONE </xsl:text>
<xsl:value-of select="concat('"',translate(@STRAT_ZONE, '"',''),'"',' ',@DEPTHFROM_ZONE,' ', @DEPTHTO_ZONE,' ',@INDEX_ZONE)" />
<xsl:text>
</xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:template>
And the result so far:到目前为止的结果:
ZONE "Flysand unchained" 0.00 0.30 -1区域“Flysand unchained” 0.00 0.30 -1
ZONE "Flysand unchained" 0.30 1.10 -1 ZONE “Flysand unchained” 0.30 1.10 -1
ZONE "Flysand unchained" 1.10 1.40 -1区域“Flysand unchained” 1.10 1.40 -1
ZONE "Flysand unchained" 1.40 1.70 -1 ZONE “Flysand unchained” 1.40 1.70 -1
ZONE "Drifting sand" 1.70 1.80 -1 ZONE“流沙” 1.70 1.80 -1
ZONE "Drifting sand" 1.80 2.20 -1 ZONE“流沙” 1.80 2.20 -1
ZONE "Drifting sand" 2.20 2.60 -1 ZONE“流沙” 2.20 2.60 -1
ZONE "Flysand unchained" 2.60 2.80 -1区域“Flysand unchained” 2.60 2.80 -1
ZONE "Flysand unchained" 2.80 2.90 -1区域“Flysand unchained” 2.80 2.90 -1
ZONE "Drifting sand" 2.90 3.10 -1 ZONE“流沙” 2.90 3.10 -1
ZONE "Drifting sand" 3.10 3.40 -1 ZONE “流沙” 3.10 3.40 -1
ZONE "Drifting sand" 3.40 3.70 -1 ZONE“流沙” 3.40 3.70 -1
ZONE "Drifting sand" 3.70 4.50 -1 ZONE“流沙” 3.70 4.50 -1
ZONE "Drifting sand" 4.50 4.90 -1 ZONE“流沙” 4.50 4.90 -1
ZONE "Vulcanic" 4.90 6.00 -1区域“火山” 4.90 6.00 -1
ZONE "Vulcanic" 6.00 6.20 -1区域“火山” 6.00 6.20 -1
ZONE "Vulcanic" 6.20 6.30 -1区域“火山” 6.20 6.30 -1
But would like to have it liek that:但是希望它具有以下优点:
ZONE "Flysand unchained" 0.00 1.70 -1
ZONE "Drifting sand" 1.70 2.60 -1
ZONE "Flysand unchained" 2.60 2.90 -1
ZONE "Drifting sand" 2.90 4.90 -1
ZONE "Vulcanic" 4.90 6.30 -1
I think you simply want我想你只是想要
<xsl:template match="ZONES">
<xsl:for-each-group select="ZONE" group-adjacent="@STRAT_ZONE">
<xsl:value-of
select="'ZONE', current-grouping-key(), min(current-group()/@DEPTHFROM_ZONE), max(current-group()/@DEPTHTO_ZONE), @INDEX_ZONE"/>
<xsl:text> </xsl:text>
</xsl:for-each-group>
</xsl:template>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.