![]() |
XSLT 1.0 Datumsvergleiche
Moin Moin.
Delphi 10.1 Starter, MSXML 6.0, Windows 7, Kaffee, Pizza. Ich habe hier eine XML Datei mit 3401 Einträgen, die so aussehen:
Code:
Das Schema dazu:
<?xml version="1.0" encoding="UTF-8"?>
<VTL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="VTL.XSD"> <Vertrag> <BPANR>280126979</BPANR> <Vertragsnummer>660258</Vertragsnummer> <Vertragsdatum>2011-04-19</Vertragsdatum> <Vertragsleitzahl>360 490 488</Vertragsleitzahl> <Geräteleitzahl>788 465 420</Geräteleitzahl> <Laufzeit>24</Laufzeit> </Vertrag>
Code:
Ich würde jetzt gerne alle Verträge eines bestimmten Zeitraumes per XSLT 1.0 (2.0 geht nicht) herausfischen.
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="VTL"> <xs:complexType> <xs:sequence> <xs:element name="Vertrag" maxOccurs="unbounded" minOccurs="0"> <xs:complexType> <xs:sequence> <xs:element type="xs:int" name="BPANR"/> <xs:element type="xs:int" name="Vertragsnummer"/> <xs:element type="xs:date" name="Vertragsdatum"/> <xs:element type="xs:string" name="Vertragsleitzahl"/> <xs:element type="xs:string" name="Geräteleitzahl"/> <xs:element type="xs:int" name="Laufzeit"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> Die XSL Datei
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="/"> <VTL> <xsl:for-each select="VTL/Vertrag"> <xsl:if test="Vertragsdatum > 2011-04-19 and Vertragsdatum < 2011-04-23"> <Vertrag> <BPANR><xsl:value-of select="BPANR"/></BPANR> </Vertrag> </xsl:if> </xsl:for-each> </VTL> </xsl:template> </xsl:stylesheet> Die XSLT rufe ich so auf
Code:
Das bringt mal überhaupt nichts. Irgendwo ist da wohl wieder ein Date Problem. Oder nicht? Oder was?
function Transform(XMLContent : string; XSLContent : string) : WideString;
var xmlSource, xslQuery, xmlResult : IXMLDOMDocument; begin xmlSource := CoDOMDocument.Create; xslQuery := CoDOMDocument.Create; xmlResult := CoDOMDocument.Create; xmlSource.load(XMLContent); xslQuery.load(XSLContent); xmlResult.loadXML(xmlSource.transformNode(xslQuery)); XMLResult.save(PrgPath + 'XML\Result.xml'); end; creehawk |
AW: XSLT 1.0 Datumsvergleiche
Hallo,
vielleicht fehlen ja auch nur Klammern beim Vergleich? |
AW: XSLT 1.0 Datumsvergleiche
Danke für den Vorschlag, aber Nee, leider nicht.
Wenn ich nur den größer als Vergleich setze geht es auch nicht. Wenn ich das Datum in Hochkommas setze auch nicht, ist dann ein String, wobei dann ist gleich natürlich funktioniert. Ich muss vermutlich das Element Vertragsdatum und den Vergleichswert als DATE Typ rüberbringen, aber eben wie? creehawk |
AW: XSLT 1.0 Datumsvergleiche
|
AW: XSLT 1.0 Datumsvergleiche
Und wieder : Nee, leider nicht.
Ich bin gezwungen den XSLT 1.0 Prozessor zu verwenden. Der versteht sich wieder an entscheidender Stelle nicht mit EXSLT. Ich kann mir winfach nicht vorstellen das eine der grundlegensten Abgleiche für Datensammlungen mit den gegebenen Möglichkeiten von MSXML und XSLT/XPATH nicht machbar sein sollen. Wobei innerhalb von Delphi eine XPath Aktion funktioniert:
Code:
creehawk
procedure TMain.DatumsabfrageClick(Sender: TObject);
Var I:Integer; Counter:Integer; Datum1:String; Datum2:String; SearchValue1:String; SearchValue2:String; begin begin Datum1 :=(DateTimeToStr(Main.CalendarPicker1.Date)); Datum2 :=(DateTimeToStr(Main.CalendarPicker2.Date)); SearchValue1:=(copy(Datum1,7,4)+'-'+copy(Datum1,4,2)+'-'+Copy(Datum1,0,2)); SearchValue2:=(copy(Datum2,7,4)+'-'+copy(Datum2,4,2)+'-'+Copy(Datum2,0,2)); Counter := VTLList.SelectNodes('//Vertrag[Vertragsdatum >= "' + SearchValue1+'" and Vertragsdatum <= "' + SearchValue2+'"]').Length; Main.Datumsabfrage.Caption:=IntToStr(Counter) + ' Verträge'; end; CreateXSLT; end; |
AW: XSLT 1.0 Datumsvergleiche
Wobei ich auch gerade sehe das ich da Strings vergleiche .....
|
AW: XSLT 1.0 Datumsvergleiche
Schau Dir die Antworten in dem Link von oben noch mal an,
ich denke da ist was für Dich dabei |
AW: XSLT 1.0 Datumsvergleiche
Moin Moin.
Die Angelegenheit mit dem numerischen Vergleich meinst du sicher, Bindestriche raus und so. Schon klar. Dafür muss ich aber EXSLT verwenden. Geht nicht. Tja, da muss ich also mal weiter rumsuchen. Creehawk |
AW: XSLT 1.0 Datumsvergleiche
Heiliger BimBam.
Ich brauche EXSLT ja gar nicht, translate gehört zu XSLT 1.0......... Ich brauche Urlaub. Das hätte ich auch alles selber finden können. Andererseits: Danke für die Antworten, denn die haben mein vernageltes Hirn auf den Weg gebracht. creehawk |
AW: XSLT 1.0 Datumsvergleiche
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz