for-each Datum filtern

24/04/2009 - 00:37 von Andrej Golubew | Report spam
Hallo zusammen,

ich habe ein Problem mit Filter.

XML
<?xml version="1.0" encoding="utf-8" ?>
<ladungen>
<ladung>
<datum>22.04.2009</datum>
<von>26133 Oldenburg</von>
<nach>56899 Frankfuhrt</nach>
<gewicht>20t</gewicht>
<ladungsart>Allgemeine Güter</ladungsart>
<bemerkung></bemerkung>
</ladung>
<ladung>
<datum>25.04.2009</datum>
<von>26133 Oldenburg</von>
<nach>56899 Frankfuhrt</nach>
<gewicht>20t</gewicht>
<ladungsart>Allgemeine Güter</ladungsart>
<bemerkung></bemerkung>
</ladung>

<ladungen>

XSLT

Das funktioniert.(ergebnis eine Zeile)

<xsl:for-each select="ladung[datum = '22.04.2009'">

Das leider nicht.(ergebnis keine Zeile muss aber 2 Zeile sein)
<xsl:for-each select="ladung[datum >= '22.04.2009'">

geht auch nicht.
<xsl:for-each select="ladung[datum >= '22.04.2009'">

Kann jemand sagen, wo ist mein Fehler?

Danke.
 

Lesen sie die antworten

#1 Martin Honnen
24/04/2009 - 11:56 | Warnen spam
Andrej Golubew wrote:

Das leider nicht.(ergebnis keine Zeile muss aber 2 Zeile sein)
<xsl:for-each select="ladung[datum >= '22.04.2009'">

geht auch nicht.
<xsl:for-each select="ladung[datum >= '22.04.2009'">

Kann jemand sagen, wo ist mein Fehler?



In XPath/XSLT 1.0 sind die Operatoren >, <, >=, <= nur für Zahlen
definiert. Einen Datumstypen gibt es nicht. Du kann also höchstens
Zahlen in der Form jjjjmmtt (also etwa 20090422) vergleichen bzw. musst,
so du ein anderes Datumsformat verwendest, entsprechend umformen.
Verwende eher gleich das Format 2009-04-22, dann kannst du in XSLT/XPath
1.0 per
<xsl:for-each select="ladung[translate(datum, '-', '') >= 20090422]">
den Zahlenvergleich nutzen und in XSLT/XPath 2.0, so du Saxon oder
Altova als XSLT-Prozessor verwendest, kannst du sogar xs:date Werte
vergleichen:
<xsl:for-each select="ladung[xs:date(datum) >= xs:date('2009-04-22')]">



Martin Honnen MVP XML
http://msmvps.com/blogs/martin_honnen/

Ähnliche fragen