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 > 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:
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