farklı düğümlerden aynı değerleri değiştirme

oy
0

Ben aynı kardeşlerinin içinde değerlerini yerelleştirilmesine gerekir. Bunlar aynıysa onları değiştirmek gerekir.

Ben bir şekilde aşağıdaki-kardeş ve önceki-kardeş ve grup-by kullanmam gerekiyor. Birinci grup, değerle ben birbirleri sonra konumda aynıdır tek s olsun ki arıyorum. Sonra eşit olup olmadığını öğrenmek için kardeş işlevlerini kullanarak.

Numune:

<programs>
    <event>
        <start>2018-11-25T13:55:00</start>
    </event>
    <event>
        <start>2018-11-27T17:00:00</start>
    </event>
    <event>
        <start>2018-11-25T13:55:00</start>
    </event>
    <event>
        <start>2018-11-25T13:55:00</start>
    </event>
</programs>

Kod:

<?xml version=1.0 encoding=UTF-8?>
<xsl:stylesheet xmlns:xsl=http://www.w3.org/1999/XSL/Transform
    xmlns:xs=http://www.w3.org/2001/XMLSchema
    exclude-result-prefixes=xs
    version=2.0>
    <xsl:template match=/>
        <output>
            <xsl:for-each select=/programs/event>
                <xsl:variable name=starttime select=./start/>
                <startOfProgram><xsl:value-of select=$starttime/></startOfProgram>
            </xsl:for-each> 
        </output>
    </xsl:template>
</xsl:stylesheet>

Arzulanan sonuçlar:

<output>
    <startOfProgram>2018-11-25T13:55:00</startOfProgram>
    <startOfProgram>2018-11-25T13:56:00</startOfProgram>
    <startOfProgram>2018-11-25T13:57:00</startOfProgram>
    <startOfProgram>2018-11-27T17:00:00</startOfProgram>
</output>

Herkes bana doğru yönde işaret ya da ben çok minnettar olurum sorunun bir kısmı ile bana yardımcı olabilir eğer öyleyse bu bir ihtimal olduğunu biliyorum.

Bunu da çıkışa rağmen yapılır almış örnekteki diğer elementlerin sürü var. Bu konularda varsa onlara çeşitli içerebilir.

Ps. Değeri kolayca olabileceğini unutmayın 2018-11-25T18:30:00sonra olması gerekir ki, 2018-11-25T18:30:00ve ardışık 2018-11-25T18:31:00aynı daha varsa.

Oluştur 27/11/2018 saat 18:17
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
0

Gruba gibi değerleri istiyorsanız gibi göstermiştir sonuç görünüyor xs:dateTimedeğerleri ve daha sonra basitçe konumuna bağlı gruptaki her öğeye bir dakika ekleyin:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="#all"
    expand-text="yes"
    version="3.0">

  <xsl:mode on-no-match="shallow-copy"/>

  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="programs">
      <output>
          <xsl:for-each-group select="event/start/xs:dateTime(.)" group-by=".">
              <xsl:for-each select="current-group()">
                  <startOfProgram>{. + (position() - 1) * xs:dayTimeDuration('PT1M')}</startOfProgram>
              </xsl:for-each>
          </xsl:for-each-group>
      </output>
  </xsl:template>

</xsl:stylesheet>

https://xsltfiddle.liberty-development.net/pPqsHUv/1 ve üzeri XSLT 3'tür ama bir XSLT 2 işlemci için ben sadece ben için kullanmış metin değeri şablonu değiştirmek gerektiğini düşünüyorum xsl:value-of:

<startOfProgram><xsl:value-of select=". + (position() - 1) * xs:dayTimeDuration('PT1M')"/></startOfProgram>

Bkz http://xsltransform.hikmatu.com/6qVRKvJ

Cevap 27/11/2018 saat 18:57
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more