Einzelnen Beitrag anzeigen

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