Thread Perl.exe stirbt bei XSLT Transformation - warum? (4 answers)
Opened by rk-ger at 2007-01-05 16:44

rk-ger
 2007-01-05 16:44
#72906 #72906
User since
2006-08-07
45 Artikel
BenutzerIn
[default_avatar]
Ich habe ein XML File in diesem Format:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?xml version="1.0" encoding="UTF-8"?>
<XML>
<LINE>
<VAR NAME="1" MACROON="smallon" COL="5" LENGTH="11">23012349697</VAR>
<VAR NAME="2" COL="18" LENGTH="3">GB</VAR>
<VAR NAME="3" COL="25" LENGTH="6">1111</VAR>
<VAR NAME="4" COL="32" LENGTH="15">NC 16.0%</VAR>
<VAR NAME="5" COL="49" LENGTH="8" JUSTIFICATION="right">17.60</VAR>
<VAR NAME="6" COL="60" LENGTH="4" JUSTIFICATION="right">16.0</VAR>
<TEXT COL="64">%</TEXT>
<VAR NAME="7" COL="70" LENGTH="10" JUSTIFICATION="right">0.00</VAR>
<VAR NAME="8" COL="87" LENGTH="7" JUSTIFICATION="right">9.50</VAR>
<VAR NAME="9" COL="100" LENGTH="7" JUSTIFICATION="right">0.00</VAR>
<VAR NAME="0" MACROOFF="smalloff" COL="111" LENGTH="10" JUSTIFICATION="right">9.50</VAR>
</LINE>
<LINE></LINE>
<LINE>
<VAR NAME="1" MACROON="smallon" COL="5" LENGTH="11">23981239687</VAR>
<VAR NAME="2" COL="18" LENGTH="3">A</VAR>
<VAR NAME="3" COL="25" LENGTH="6">8410</VAR>
<VAR NAME="4" COL="32" LENGTH="15">NC 16.0%</VAR>
<VAR NAME="5" COL="49" LENGTH="8" JUSTIFICATION="right">19.15</VAR>
<VAR NAME="6" COL="60" LENGTH="4" JUSTIFICATION="right">16.0</VAR>
<TEXT COL="64">%</TEXT>
<VAR NAME="7" COL="70" LENGTH="10" JUSTIFICATION="right">0.00</VAR>
<VAR NAME="8" COL="87" LENGTH="7" JUSTIFICATION="right">9.20</VAR>
<VAR NAME="9" COL="100" LENGTH="7" JUSTIFICATION="right">0.00</VAR>
<VAR NAME="0" MACROOFF="smalloff" COL="111" LENGTH="10" JUSTIFICATION="right">9.20</VAR>
</LINE>
<LINE></LINE>
</XML>


und ein XSLT File um die XML Datei in eine CSV Datei zu wandeln:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="iso-8859-1"/>
<xsl:strip-space elements="*" />

<xsl:template match="/">
<xsl:apply-templates select="/XML/LINE"/>
</xsl:template>

<xsl:template match="/XML/LINE">
<xsl:variable name="anz_var" select="count(child::VAR)" />
<xsl:if test="$anz_var = 10">
<xsl:for-each select="VAR">
<xsl:if test="position() != last()"><xsl:value-of select="normalize-space(.)"/>;</xsl:if>
<xsl:if test="position() = last()"><xsl:value-of select="normalize-space(.)"/><xsl:text>&#x0A;</xsl:text></xsl:if>
</xsl:for-each>
</xsl:if>
</xsl:template>
</xsl:stylesheet>


Herauskommen soll dieses CSV-File:

Code: (dl )
1
2
23012349697;GB;1111;NC 16.0%;17.60;16.0;0.00;9.50;0.00;9.50
23981239687;A;8410;NC 16.0%;19.15;16.0;0.00;9.20;0.00;9.20


Mit diesem Code funktioniert das auch:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
my $xmlfile = "1.xml";
my $xslfile = "1.xsl";

use XML::LibXSLT;
use XML::LibXML;

print "start\n";
my $parser = XML::LibXML->new();
my $xslt = XML::LibXSLT->new();

my $source = $parser->parse_file($xmlfile);
my $style_doc = $parser->parse_file($xslfile);

my $stylesheet = $xslt->parse_stylesheet($style_doc);

my $results = $stylesheet->transform($source);

print $stylesheet->output_string($results);
print "\nstop\n";


Das waren Testdaten. Damit gibt es keine Probleme. Wenn ich jetzt aber das 'echte' XML File nehme, dann stirbt mir Perl (Windows) mit einem 'Ausnahmefehler'. Sowohl in der IDE (Eclipse) als auch auf der Kommandozeile (Windows 2000 pro). Das 'echte' XML File ist immer zwischen 30000 und 60000 Zeilen lang und erzeugt eine CSV Datei mit 2500 bis 5000 Zeilen. Kann das ein Speicherplatzproblem sein? Ich habe in dem Rechner nur 512 MB.

View full thread Perl.exe stirbt bei XSLT Transformation - warum?