简体   繁体   English

文本 output 来自 XML 与 XSLT 与分组

[英]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('&quot;',translate(@STRAT_ZONE, '&quot;',''),'&quot;',' ',@DEPTHFROM_ZONE,' ', @DEPTHTO_ZONE,' ',@INDEX_ZONE)" />
            <xsl:text>&#xA;</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>&#10;</xsl:text>
      </xsl:for-each-group>
  </xsl:template>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM