Durst
07.08.2008, 16:37
Hallo,
ich habe derzeit ein problem mit der umwandlung von XMS in SQL, ich habe noch nicht sehr viel ahnung damit, also schilder ich mein Problem einfach mal.
Mein Ziel ist es, Daten aus einer .xml datei auzulesen bsp.:
<?xml version="1.0" standalone="yes"?>
<dsPreisliste xmlns="http://tempuri.org/dsPreisliste.xsd">
<PRKopf>
<PRNr>0000000086</PRNr>
<PRTyp>A</PRTyp>
<Bezei>Unsere Sommer-Salate: Kalt, knackig, köstlich</Bezei>
<Gueab>2008-06-02T00:00:00.0000000+02:00</Gueab>
<Guebi>2008-09-30T00:00:00.0000000+02:00</Guebi>
<Preisab>2008-06-16T00:00:00.0000000+02:00</Preisab>
</PRKopf>
<PRPos>
<Mandt />
<PRNr>0000000086</PRNr>
<PRTyp>A</PRTyp>
<Artnr>000000000000000280</Artnr>
<Bezei>Laugenbrezel</Bezei>
<Bezei_Lang>fertig gebacken</Bezei_Lang>
<Artgrp>HOFAKTION</Artgrp>
<MwStArt>01</MwStArt>
<Kohlenhydrate>46.666666666666666666666666670</Kohlenhydrate>
<Fett>1.3333333333333333333333333300</Fett>
<Eiweiss>4.00</Eiweiss>
<GesEinwaage>75</GesEinwaage>
<FleischEinwaage>0</FleischEinwaage>
<EKEinheit>KAR</EKEinheit>
<EKEinheit_Inhalt>36</EKEinheit_Inhalt>
<Basiseinheit>ST</Basiseinheit>
<EKPreis>0.52</EKPreis>
<flgKarton>false</flgKarton>
<Schwein>false</Schwein>
<Fisch>false</Fisch>
<Rind>false</Rind>
<Vollkost>false</Vollkost>
<Leichtekost>false</Leichtekost>
<flgMPS>false</flgMPS>
<Piccolino>false</Piccolino>
<Microwelle>false</Microwelle>
<BEAngabe>false</BEAngabe>
<Diaet>false</Diaet>
<Neu>false</Neu>
<MPSPortion>0</MPSPortion>
<PRL_Liste>Unsere Sommer-Salate: Kalt, knackig, köstlich</PRL_Liste>
<PRL_Gruppe>Aktion</PRL_Gruppe>
<PRL_UGruppe />
</PRPos>
<PRPos>
<Mandt />
<PRNr>0000000086</PRNr>
<PRTyp>A</PRTyp>
<Artnr>000000000000000383</Artnr>
<Bezei>Weizenbrötchen</Bezei>
<Bezei_Lang>fertig gebacken</Bezei_Lang>
<Artgrp>HOFAKTION</Artgrp>
<MwStArt>01</MwStArt>
<Kohlenhydrate>0</Kohlenhydrate>
<Fett>0</Fett>
<Eiweiss>0</Eiweiss>
<GesEinwaage>0</GesEinwaage>
<FleischEinwaage>0</FleischEinwaage>
<EKEinheit>BTL</EKEinheit>
<EKEinheit_Inhalt>10</EKEinheit_Inhalt>
<Basiseinheit>ST</Basiseinheit>
<EKPreis>0.26</EKPreis>
<flgKarton>false</flgKarton>
<Schwein>false</Schwein>
<Fisch>false</Fisch>
<Rind>false</Rind>
<Vollkost>false</Vollkost>
<Leichtekost>false</Leichtekost>
<flgMPS>false</flgMPS>
<Piccolino>false</Piccolino>
<Microwelle>false</Microwelle>
<BEAngabe>false</BEAngabe>
<Diaet>false</Diaet>
<Neu>false</Neu>
<MPSPortion>0</MPSPortion>
<PRL_Liste>Unsere Sommer-Salate: Kalt, knackig, köstlich</PRL_Liste>
<PRL_Gruppe>Aktion</PRL_Gruppe>
<PRL_UGruppe />
</PRPos>...und diese Daten dann via .XSL
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:hf="http://tempuri.org/dsPreisliste.xsd">
<xsl:output method="text"
encoding="utf-8"
standalone="yes" />
<!-- Root-Template -->
<xsl:template match="/dsPreisliste" xml:space="preserve">
<xsl:apply-templates select="PRPos"></xsl:apply-templates>
</xsl:template>
<xsl:template match="PRPos">
insert into Artikel( Artnr, Bezei, Bezei_Lang, Kohlenhydrate, Fett, Eiweiss,
GesEinwaage, FleischEinwaage, EKEinheit, EKEinheit_Inhalt, Basiseinheit, EKPreis,
Schwein, Fisch, Rind, Vollkost, Leichtekost, Neu, Diaet, Piccolino, PRL_Liste )
values(
'<xsl:value-of select="substring(Artnr,string-length(Artnr)-3)"/>', '<xsl:value-of select="Bezei"/>', '<xsl:value-of select="Bezei_Lang"/>',
<xsl:value-of select="Kohlenhydrate"/>, <xsl:value-of select="Fett"/>, <xsl:value-of select="Eiweiss"/>,
<xsl:value-of select="GesEinwaage"/>, <xsl:value-of select="FleischEinwaage"/>,
'<xsl:value-of select="EKEinheit"/>', <xsl:value-of select="EKEinheit_Inhalt"/>, '<xsl:value-of select="Basiseinheit"/>', <xsl:value-of select="EKPreis"/>,
'<xsl:value-of select="Schwein"/>', '<xsl:value-of select="Fisch"/>', '<xsl:value-of select="Rind"/>', '<xsl:value-of select="Vollkost"/>',
'<xsl:value-of select="Leichtekost"/>', '<xsl:value-of select="Neu"/>', '<xsl:value-of select="Diaet"/>', '<xsl:value-of select="Piccolino"/>', '<xsl:value-of select="PRL_Liste"/>' );
</xsl:template>
</xsl:stylesheet>in eine .SQL Datei zu speicher, aussehen soll das ganze dann so:
insert into Artikel( Artnr, Bezei, Bezei_Lang, Kohlenhydrate, Fett, Eiweiss,
GesEinwaage, FleischEinwaage, EKEinheit, EKEinheit_Inhalt, Basiseinheit, EKPreis,
Schwein, Fisch, Rind, Vollkost, Leichtekost, Neu, Diaet, Piccolino, PRL_Liste )
values(
'0280', 'Laugenbrezel', 'fertiggebacken',
0, 0, 0,
0, 0,
'KAR', 36, 'ST', 0.7,
'false', 'false', 'false', 'false',
'false', 'false', 'false', 'false', 'Snacks, Salate, Desserts 2007' );
insert into Artikel( Artnr, Bezei, Bezei_Lang, Kohlenhydrate, Fett, Eiweiss,
GesEinwaage, FleischEinwaage, EKEinheit, EKEinheit_Inhalt, Basiseinheit, EKPreis,
Schwein, Fisch, Rind, Vollkost, Leichtekost, Neu, Diaet, Piccolino, PRL_Liste )
values(
'0380', 'Weizenbrötchen', 'fertiggebacken',
0, 0, 0,
50, 0,
'BTL', 9, 'ST', 0.2,
'false', 'false', 'false', 'false',
'true', 'false', 'false', 'false', 'Snacks, Salate, Desserts 2007' );und hiermal der C#-Code mit dem ich das ganze anstelle:
folderpath = Server.MapPath(@"..\Tools\");
xmlliste();
FileStream fsOutPut = File.OpenWrite(Path.Combine(folderpath, "artikel.sql"));
StreamWriter sw = new StreamWriter(fsOutPut);
sw.WriteLine(@"DELETE FROM Artikel;");
sw.Flush();
for (int i = 0; i <= filepatharray.Length - 1; i++)
{
XmlDocument doc = new XmlDocument();
doc.Load(filepatharray[i]);
XPathNavigator nav = doc.CreateNavigator();
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load(Path.Combine(folderpath, "PreisToArtikel.xsl"));
xslt.Transform(filepatharray[i], null, fsOutPut);
fsOutPut.Flush();
fsOutPut.Close();
}
mein problem ist nun der namespace der .xml Datei
<dsPreisliste xmlns="http://tempuri.org/dsPreisliste.xsd">
dabei konvertiert es nicht richtig in sql hier mal ein kleiner auszug davon:
0000000086
A
Unsere Sommer-Salate: Kalt, knackig, köstlich
2008-06-02T00:00:00.0000000+02:00
2008-09-30T00:00:00.0000000+02:00
2008-06-16T00:00:00.0000000+02:00
0000000086
A
000000000000000280
Laugenbrezel
fertig gebacken
HOFAKTION
01
46.666666666666666666666666670
1.3333333333333333333333333300
4.00
75
0
KAR
36
ST
0.52
false
false
false
false
false
false
false
false
false
false
false
false
0
Unsere Sommer-Salate: Kalt, knackig, köstlich
Aktion
wenn ich nun den namespace aus der xml datei lösche, funktioniert es wie gewünscht.
xmlns="http://tempuri.org/dsPreisliste.xsd"
Wie "entferne" ich den namespace beim convertieren? bzw. warum funktioniert es mit namespace nicht?
Später sollen nämlich die xml-dateien automatisch aus dem Internet geladen und konvertiert werden, da kann ich also nicht immer den namespace löschen.
Ich bedanke mich schonmal für eure hilfe:)
mfg
ich habe derzeit ein problem mit der umwandlung von XMS in SQL, ich habe noch nicht sehr viel ahnung damit, also schilder ich mein Problem einfach mal.
Mein Ziel ist es, Daten aus einer .xml datei auzulesen bsp.:
<?xml version="1.0" standalone="yes"?>
<dsPreisliste xmlns="http://tempuri.org/dsPreisliste.xsd">
<PRKopf>
<PRNr>0000000086</PRNr>
<PRTyp>A</PRTyp>
<Bezei>Unsere Sommer-Salate: Kalt, knackig, köstlich</Bezei>
<Gueab>2008-06-02T00:00:00.0000000+02:00</Gueab>
<Guebi>2008-09-30T00:00:00.0000000+02:00</Guebi>
<Preisab>2008-06-16T00:00:00.0000000+02:00</Preisab>
</PRKopf>
<PRPos>
<Mandt />
<PRNr>0000000086</PRNr>
<PRTyp>A</PRTyp>
<Artnr>000000000000000280</Artnr>
<Bezei>Laugenbrezel</Bezei>
<Bezei_Lang>fertig gebacken</Bezei_Lang>
<Artgrp>HOFAKTION</Artgrp>
<MwStArt>01</MwStArt>
<Kohlenhydrate>46.666666666666666666666666670</Kohlenhydrate>
<Fett>1.3333333333333333333333333300</Fett>
<Eiweiss>4.00</Eiweiss>
<GesEinwaage>75</GesEinwaage>
<FleischEinwaage>0</FleischEinwaage>
<EKEinheit>KAR</EKEinheit>
<EKEinheit_Inhalt>36</EKEinheit_Inhalt>
<Basiseinheit>ST</Basiseinheit>
<EKPreis>0.52</EKPreis>
<flgKarton>false</flgKarton>
<Schwein>false</Schwein>
<Fisch>false</Fisch>
<Rind>false</Rind>
<Vollkost>false</Vollkost>
<Leichtekost>false</Leichtekost>
<flgMPS>false</flgMPS>
<Piccolino>false</Piccolino>
<Microwelle>false</Microwelle>
<BEAngabe>false</BEAngabe>
<Diaet>false</Diaet>
<Neu>false</Neu>
<MPSPortion>0</MPSPortion>
<PRL_Liste>Unsere Sommer-Salate: Kalt, knackig, köstlich</PRL_Liste>
<PRL_Gruppe>Aktion</PRL_Gruppe>
<PRL_UGruppe />
</PRPos>
<PRPos>
<Mandt />
<PRNr>0000000086</PRNr>
<PRTyp>A</PRTyp>
<Artnr>000000000000000383</Artnr>
<Bezei>Weizenbrötchen</Bezei>
<Bezei_Lang>fertig gebacken</Bezei_Lang>
<Artgrp>HOFAKTION</Artgrp>
<MwStArt>01</MwStArt>
<Kohlenhydrate>0</Kohlenhydrate>
<Fett>0</Fett>
<Eiweiss>0</Eiweiss>
<GesEinwaage>0</GesEinwaage>
<FleischEinwaage>0</FleischEinwaage>
<EKEinheit>BTL</EKEinheit>
<EKEinheit_Inhalt>10</EKEinheit_Inhalt>
<Basiseinheit>ST</Basiseinheit>
<EKPreis>0.26</EKPreis>
<flgKarton>false</flgKarton>
<Schwein>false</Schwein>
<Fisch>false</Fisch>
<Rind>false</Rind>
<Vollkost>false</Vollkost>
<Leichtekost>false</Leichtekost>
<flgMPS>false</flgMPS>
<Piccolino>false</Piccolino>
<Microwelle>false</Microwelle>
<BEAngabe>false</BEAngabe>
<Diaet>false</Diaet>
<Neu>false</Neu>
<MPSPortion>0</MPSPortion>
<PRL_Liste>Unsere Sommer-Salate: Kalt, knackig, köstlich</PRL_Liste>
<PRL_Gruppe>Aktion</PRL_Gruppe>
<PRL_UGruppe />
</PRPos>...und diese Daten dann via .XSL
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:hf="http://tempuri.org/dsPreisliste.xsd">
<xsl:output method="text"
encoding="utf-8"
standalone="yes" />
<!-- Root-Template -->
<xsl:template match="/dsPreisliste" xml:space="preserve">
<xsl:apply-templates select="PRPos"></xsl:apply-templates>
</xsl:template>
<xsl:template match="PRPos">
insert into Artikel( Artnr, Bezei, Bezei_Lang, Kohlenhydrate, Fett, Eiweiss,
GesEinwaage, FleischEinwaage, EKEinheit, EKEinheit_Inhalt, Basiseinheit, EKPreis,
Schwein, Fisch, Rind, Vollkost, Leichtekost, Neu, Diaet, Piccolino, PRL_Liste )
values(
'<xsl:value-of select="substring(Artnr,string-length(Artnr)-3)"/>', '<xsl:value-of select="Bezei"/>', '<xsl:value-of select="Bezei_Lang"/>',
<xsl:value-of select="Kohlenhydrate"/>, <xsl:value-of select="Fett"/>, <xsl:value-of select="Eiweiss"/>,
<xsl:value-of select="GesEinwaage"/>, <xsl:value-of select="FleischEinwaage"/>,
'<xsl:value-of select="EKEinheit"/>', <xsl:value-of select="EKEinheit_Inhalt"/>, '<xsl:value-of select="Basiseinheit"/>', <xsl:value-of select="EKPreis"/>,
'<xsl:value-of select="Schwein"/>', '<xsl:value-of select="Fisch"/>', '<xsl:value-of select="Rind"/>', '<xsl:value-of select="Vollkost"/>',
'<xsl:value-of select="Leichtekost"/>', '<xsl:value-of select="Neu"/>', '<xsl:value-of select="Diaet"/>', '<xsl:value-of select="Piccolino"/>', '<xsl:value-of select="PRL_Liste"/>' );
</xsl:template>
</xsl:stylesheet>in eine .SQL Datei zu speicher, aussehen soll das ganze dann so:
insert into Artikel( Artnr, Bezei, Bezei_Lang, Kohlenhydrate, Fett, Eiweiss,
GesEinwaage, FleischEinwaage, EKEinheit, EKEinheit_Inhalt, Basiseinheit, EKPreis,
Schwein, Fisch, Rind, Vollkost, Leichtekost, Neu, Diaet, Piccolino, PRL_Liste )
values(
'0280', 'Laugenbrezel', 'fertiggebacken',
0, 0, 0,
0, 0,
'KAR', 36, 'ST', 0.7,
'false', 'false', 'false', 'false',
'false', 'false', 'false', 'false', 'Snacks, Salate, Desserts 2007' );
insert into Artikel( Artnr, Bezei, Bezei_Lang, Kohlenhydrate, Fett, Eiweiss,
GesEinwaage, FleischEinwaage, EKEinheit, EKEinheit_Inhalt, Basiseinheit, EKPreis,
Schwein, Fisch, Rind, Vollkost, Leichtekost, Neu, Diaet, Piccolino, PRL_Liste )
values(
'0380', 'Weizenbrötchen', 'fertiggebacken',
0, 0, 0,
50, 0,
'BTL', 9, 'ST', 0.2,
'false', 'false', 'false', 'false',
'true', 'false', 'false', 'false', 'Snacks, Salate, Desserts 2007' );und hiermal der C#-Code mit dem ich das ganze anstelle:
folderpath = Server.MapPath(@"..\Tools\");
xmlliste();
FileStream fsOutPut = File.OpenWrite(Path.Combine(folderpath, "artikel.sql"));
StreamWriter sw = new StreamWriter(fsOutPut);
sw.WriteLine(@"DELETE FROM Artikel;");
sw.Flush();
for (int i = 0; i <= filepatharray.Length - 1; i++)
{
XmlDocument doc = new XmlDocument();
doc.Load(filepatharray[i]);
XPathNavigator nav = doc.CreateNavigator();
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load(Path.Combine(folderpath, "PreisToArtikel.xsl"));
xslt.Transform(filepatharray[i], null, fsOutPut);
fsOutPut.Flush();
fsOutPut.Close();
}
mein problem ist nun der namespace der .xml Datei
<dsPreisliste xmlns="http://tempuri.org/dsPreisliste.xsd">
dabei konvertiert es nicht richtig in sql hier mal ein kleiner auszug davon:
0000000086
A
Unsere Sommer-Salate: Kalt, knackig, köstlich
2008-06-02T00:00:00.0000000+02:00
2008-09-30T00:00:00.0000000+02:00
2008-06-16T00:00:00.0000000+02:00
0000000086
A
000000000000000280
Laugenbrezel
fertig gebacken
HOFAKTION
01
46.666666666666666666666666670
1.3333333333333333333333333300
4.00
75
0
KAR
36
ST
0.52
false
false
false
false
false
false
false
false
false
false
false
false
0
Unsere Sommer-Salate: Kalt, knackig, köstlich
Aktion
wenn ich nun den namespace aus der xml datei lösche, funktioniert es wie gewünscht.
xmlns="http://tempuri.org/dsPreisliste.xsd"
Wie "entferne" ich den namespace beim convertieren? bzw. warum funktioniert es mit namespace nicht?
Später sollen nämlich die xml-dateien automatisch aus dem Internet geladen und konvertiert werden, da kann ich also nicht immer den namespace löschen.
Ich bedanke mich schonmal für eure hilfe:)
mfg