[GastForen Programmierung/Entwicklung FileMaker Daten gruppieren XML/XSLT

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

Daten gruppieren XML/XSLT

MarioF
Beiträge gesamt: 390

16. Feb 2017, 19:49
Beitrag # 1 von 4
Bewertung:
(14062 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Moin,
ich will über eine XSLT Daten gruppieren. Jetzt habe ich folgendes:
###
<xsl:template match="fmp:ROW">
<produkt>
<artikel><xsl:value-of select="fmp:COL[1]/fmp:DATA"/></artikel>
<bezeichnung><xsl:value-of select="fmp:COL[2]/fmp:DATA"/></bezeichnung>
<art><xsl:value-of select="fmp:COL[3]/fmp:DATA"/></art>
</produkt>
</xsl:template>
###

Jetzt habe ich versuch, alles über for-each-group laufen zu lassen:
###
<xsl:for-each-group select="fmp:COL[1]/fmp:DATA" group-adjacent="@artikel">
<group>
<artikel><xsl:value-of select="."/></artikel>
<xsl:for-each select="fmp:COL[2]/fmp:DATA">
<bezeichnung><xsl:value-of select="."/></bezeichnung>
<xsl:variable name="pos" select="position()" />
<art><xsl:value-of select="../../fmp:COL[3]/fmp:DATA[$pos]"/></art>
</xsl:for-each>
</group>
</xsl:for-each-group>
###

Leider bekomme ich in der xml-Ausgabe nur
<root>
<katalog>
<produkt/>
<produkt/>
...
</katalog>
</root>

Wie muss for-each-group aussehen, damit es klappt?
X

Daten gruppieren XML/XSLT

JensTeich
  
Beiträge gesamt: 595

7. Mär 2017, 11:33
Beitrag # 2 von 4
Beitrag ID: #556099
Bewertung:
(13945 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
for-each-group ist xslt 2.0 denke ich. FileMaker kann nur xslt 1.0.

Da kann man gruppieren mit der Muench Methode (https://en.wikipedia.org/wiki/XSLT/Muenchian_grouping).

LG
Jens


als Antwort auf: [#555683]

Daten gruppieren XML/XSLT

MarioF
Beiträge gesamt: 390

8. Mär 2017, 20:03
Beitrag # 3 von 4
Beitrag ID: #556200
Bewertung:
(13901 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,
ja, Muench Methode...
Ich lasse jetzt FM erst mal außen vor. Ich habe jetzt dieses XML-Beispiel
Code
<?xml version="1.0" encoding="UTF-8" ?> 
<?xml-stylesheet type="text/xsl" href="group.xsl"?>
<FMPDSORESULT>
<ROW>
<Abschnitt>Abschnitt 1</Abschnitt>
<Titel>X-25-78</Titel>
</ROW>
<ROW>
<Abschnitt>Abschnitt 1</Abschnitt>
<Titel>X-25-80</Titel>
</ROW>
<ROW>
<Abschnitt>Abschnitt 1</Abschnitt>
<Titel>X-25-81</Titel>
</ROW>
<ROW>
<Abschnitt>Abschnitt 2</Abschnitt>
<Titel>WW-25-78</Titel>
</ROW>
<ROW>
<Abschnitt>Abschnitt 2</Abschnitt>
<Titel>WX-25-78</Titel>
</ROW>
</FMPDSORESULT>

Dazu diese XSLT
Code
<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"
version="1.0"
encoding="UTF-8"
indent="yes"/>

<xsl:template match="/">
<Root>
<Projekt>
<xsl:apply-templates select="FMPDSORESULT/ROW"/>
</Projekt>
</Root>
</xsl:template>

<xsl:key name="groupKey" match="ROW" use="Abschnitt" />

<xsl:template match="ROW">
<Abschnitt>

<xsl:for-each select="ROW[count(. | key('groupKey', Abschnitt)[1]) = 1]">
<xsl:sort select="Abschnitt" data-type="text"/>
<xsl:value-of select="Abschnitt" />
<xsl:for-each select="key('groupKey', Abschnitt)">
<xsl:sort select="Titel" />
<xsl:value-of select="Titel" />
</xsl:for-each>
</xsl:for-each>

</Abschnitt>
</xsl:template>
</xsl:stylesheet>


Ich habe mich dabei an diesem Beispiel gehalten http://www.beacontechnologies.com/...he-muenchian-method/
Trotzdem bekomme ich kein Ergebnis. Hab ich etwas übersehen?


als Antwort auf: [#556099]

Daten gruppieren XML/XSLT

MarioF
Beiträge gesamt: 390

9. Mär 2017, 09:20
Beitrag # 4 von 4
Beitrag ID: #556207
Bewertung:
(13859 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
So klappt es
Code
<xsl:key name="groupKey" match="ROW" use="Abschnitt" /> 

<xsl:template match="FMPDSORESULT">
<xsl:for-each select="ROW[count(. | key('groupKey', fmp:Abschnitt)[1]) = 1]">
<xsl:sort select="Abschnitt" />
<xsl:value-of select="Abschnitt" />
<xsl:for-each select="key('groupKey', Abschnitt)">
<xsl:sort select="Titel" />
<xsl:value-of select="Titel" />
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>



als Antwort auf: [#556200]
X