Avatar billede NCG Novice
18. juli 2011 - 11:04 Der er 2 kommentarer og
1 løsning

Inline xslt, xpath og sum

Har en lille udfordring i en Biztalk mapning, som jeg spekulerede på måske var nemmere at lave med noget xpath og sum?

For hver LINLoop1:
a) Summer TAXLoop3 felt C51602, hvor TAX01=7 & (C24101=ENV | C24101=EXC) & C51601=124
b) Summer ALCLoop2 felt C51602, hvor QTY_2 findes & ALC01=A & C51601=8
c) Summer ALCLoop2 felt C51602, hvor QTY_2 findes & ALC01=C & C51601=8

Men kan man det, når decimaltegn er komma?
Det kan laves via 2 mapninger, men det ville være pænere hvis det kunne holdes i 1, med noget inline xslt.

Udklip af XML:
<ns0:LINLoop1>
  <ns0:QTY_2>
    <ns0:C186_2>
      <C18601>47</C18601>
      <C18602>25</C18602>
      <C18603>PCE</C18603>
    </ns0:C186_2>
  </ns0:QTY_2>
  <ns0:TAXLoop3>
    <ns0:TAX_3>
      <TAX01>7</TAX01>
      <ns0:C241_3>
        <C24101>ENV</C24101>
      </ns0:C241_3>
    </ns0:TAX_3>
    <ns0:MOA_7>
      <ns0:C516_7>
        <C51601>124</C51601>
        <C51602>97,25</C51602>
      </ns0:C516_7>
    </ns0:MOA_7>
  </ns0:TAXLoop3>
  <ns0:TAXLoop3>
    <ns0:TAX_3>
      <TAX01>7</TAX01>
      <ns0:C241_3>
        <C24101>EXC</C24101>
      </ns0:C241_3>
    </ns0:TAX_3>
    <ns0:MOA_7>
      <ns0:C516_7>
        <C51601>124</C51601>
        <C51602>27,15</C51602>
      </ns0:C516_7>
    </ns0:MOA_7>
  </ns0:TAXLoop3>
  <ns0:ALCLoop2>
    <ns0:ALC_2>
      <ALC01>A</ALC01>
    </ns0:ALC_2>
    <ns0:MOALoop3>
      <ns0:MOA_8>
        <ns0:C516_8>
        <C51601>8</C51601>
        <C51602>2,75</C51602></ns0:C516_8>
      </ns0:MOA_8>
    </ns0:MOALoop3>
  </ns0:ALCLoop2>
  <ns0:ALCLoop2>
    <ns0:ALC_2>
      <ALC01>C</ALC01>
    </ns0:ALC_2>
    <ns0:MOALoop3>
      <ns0:MOA_8>
        <ns0:C516_8>
        <C51601>8</C51601>
        <C51602>1,75</C51602></ns0:C516_8>
      </ns0:MOA_8>
    </ns0:MOALoop3>
  </ns0:ALCLoop2>
</ns0:LINLoop1>
Avatar billede jokkejensen Novice
27. juli 2011 - 10:32 #1
Her er et forslag til 1'eren, resten kan vist selv løses vha små rettelser.

Du er desværre nødsaget til at lave et midlertidigt dumb i xslt 1.0


<xsl:template match="ns0:LINLoop1">
        <xsl:variable name="v1">
            <data>               
                <xsl:for-each select="//ns0:TAXLoop3//C51602[(ancestor::ns0:TAXLoop3//TAX01/text() = '7') and (ancestor::ns0:TAXLoop3//C24101/text() = 'ENV' or ancestor::ns0:TAXLoop3//C24101/text() = 'EXC') and ancestor::ns0:TAXLoop3//C51601/text() = '124']">
                    <d>
                        <xsl:value-of select="translate(., ',', '.')"/>
                    </d>
                </xsl:for-each>
            </data>
        </xsl:variable>
        <xsl:value-of select="sum(msxml:node-set($v1)//d)"/>           
    </xsl:template>


i 2.0 noget ala:


sum(//ns0:TAXLoop3//C51602[(ancestor::ns0:TAXLoop3//TAX01/text() = '7') and (ancestor::ns0:TAXLoop3//C24101/text() = 'ENV' or ancestor::ns0:TAXLoop3//C24101/text() = 'EXC') and ancestor::ns0:TAXLoop3//C51601/text() = '124']/number(translate(',', '.')))


/J
Avatar billede NCG Novice
04. august 2011 - 08:17 #2
Tak for forslaget! Jeg kunne godt nok ikke bruge det helt som skrevet her, men det gav mig da inspiration til selv at løse problemet.

Smid venligst et svar Jokke :)
Avatar billede jokkejensen Novice
04. august 2011 - 09:14 #3
okay, men hvis jeg ikke har hjulpet ligger du bare selv et svar og acceptere det.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester