AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

XSLT 1.0 Datumsvergleiche

Ein Thema von creehawk · begonnen am 31. Mai 2017 · letzter Beitrag vom 1. Jun 2017
Antwort Antwort
creehawk

Registriert seit: 1. Jul 2013
Ort: Hamburg
241 Beiträge
 
Delphi 10.4 Sydney
 
#1

XSLT 1.0 Datumsvergleiche

  Alt 31. Mai 2017, 17:29
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:
<?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>
Das Schema dazu:
Code:
<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>
Ich würde jetzt gerne alle Verträge eines bestimmten Zeitraumes per XSLT 1.0 (2.0 geht nicht) herausfischen.

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 &gt; 2011-04-19 and Vertragsdatum &lt; 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:
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;
Das bringt mal überhaupt nichts. Irgendwo ist da wohl wieder ein Date Problem. Oder nicht? Oder was?

creehawk
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: XSLT 1.0 Datumsvergleiche

  Alt 31. Mai 2017, 19:12
Hallo,
vielleicht fehlen ja auch nur Klammern beim Vergleich?
Heiko
  Mit Zitat antworten Zitat
creehawk

Registriert seit: 1. Jul 2013
Ort: Hamburg
241 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: XSLT 1.0 Datumsvergleiche

  Alt 31. Mai 2017, 19:24
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
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: XSLT 1.0 Datumsvergleiche

  Alt 31. Mai 2017, 19:45
Vielleicht hilft Dir das weiter?

https://stackoverflow.com/questions/...-compare-dates
Fritz Westermann
  Mit Zitat antworten Zitat
creehawk

Registriert seit: 1. Jul 2013
Ort: Hamburg
241 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: XSLT 1.0 Datumsvergleiche

  Alt 31. Mai 2017, 20:02
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:
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;
creehawk
  Mit Zitat antworten Zitat
creehawk

Registriert seit: 1. Jul 2013
Ort: Hamburg
241 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: XSLT 1.0 Datumsvergleiche

  Alt 31. Mai 2017, 20:02
Wobei ich auch gerade sehe das ich da Strings vergleiche .....
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: XSLT 1.0 Datumsvergleiche

  Alt 31. Mai 2017, 20:12
Schau Dir die Antworten in dem Link von oben noch mal an,
ich denke da ist was für Dich dabei
Fritz Westermann
  Mit Zitat antworten Zitat
creehawk

Registriert seit: 1. Jul 2013
Ort: Hamburg
241 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: XSLT 1.0 Datumsvergleiche

  Alt 1. Jun 2017, 06:04
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
  Mit Zitat antworten Zitat
creehawk

Registriert seit: 1. Jul 2013
Ort: Hamburg
241 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: XSLT 1.0 Datumsvergleiche

  Alt 1. Jun 2017, 10:34
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
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: XSLT 1.0 Datumsvergleiche

  Alt 1. Jun 2017, 10:55
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
Wollte ich Dir gerade schreiben....
Fritz Westermann
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz