fra xml til ascii med danske bogstaver
HejJeg har en lille udfordring, hvor jeg først skal danne et xml dokument som gør fint. Udfra mit xml dokument skal jeg via XSL(T) danne et tekst dokument som skal være med ASCII encoding og det er her jeg oplever problemet.
Inden jeg danner mit tekst dokument løber jeg først mit xml dokument igennem for at ændre mine danske bogstaver fra UTF-8 til ASCII og her er der givetvis også et problem.
Jeg gør følgende:
//Dan xml fil
XmlDocument doc = new XmlDocument();
doc.Load(filename);
XmlElement root = doc.DocumentElement;
XPathNavigator nav = root.CreateNavigator();
XslTransform xslt = new XslTransform();
//Transformer xml fil via XSL
xslt.Load(TransformerFileName);
FileStream fileStream = new FileStream(resultfile, FileMode.Append);
XmlTextWriter writer = new XmlTextWriter(fileStream, System.Text.Encoding.UTF8);
xslt.Transform(nav, null, writer, null);
writer.Close();
fileStream.Close();
//åbn nylavet xml fil og konverter de danske bogstaver...
//open the newly created file and read content
FileStream fs = new FileStream(resultfile, FileMode.Open);
StreamReader sr = new StreamReader(fs, System.Text.Encoding.UTF8);
//Convert danish characters to DOS format
string temp = ConvertToDos(sr.ReadToEnd());
sr.Close();
fs.Close();
//Gem tekst fil igen.
FileStream fs2 = new FileStream(resultfile, FileMode.Open);
StreamWriter sw = new StreamWriter(fs2, System.Text.Encoding.ASCII);
sw.Write(temp);
sw.Close();
fs2.Close();
//ConvertToDos
public static string ConvertToDos(string input)
{
//hex værdier
input = input.Replace("æ", "E6");
input = input.Replace("ø", "F8");
input = input.Replace("å", "E5");
input = input.Replace("Æ", "C6");
input = input.Replace("Ø", "D8");
input = input.Replace("Å", "C5");
return input;
}
Når jeg så har fjernet danske tegn skal jeg så generere min tekst fil udfra min xsl fil som ses nedenfor
Her har jeg lidt problemer med at lave en korrekt linje skift, som skal indeholde "0D 0A"
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:main="http://rep.oio.dk/ubl/xml/schemas/0p71/maindoc/"
xmlns:com="http://rep.oio.dk/ubl/xml/schemas/0p71/common/"
xmlns:pie="http://rep.oio.dk/ubl/xml/schemas/0p71/pie/"
xmlns:tpcm="http://rep.oio.dk/ubl/xml/schemas/0p71/testpcm/"
xmlns:tpie="http://rep.oio.dk/ubl/xml/schemas/0p71/testpie/"
xmlns:pcm="http://rep.oio.dk/ubl/xml/schemas/0p71/pcm/"
>
<xsl:preserve-space elements="*"/>
<xsl:template match="/">
<xsl:apply-templates select="/*[local-name()='Invoice']"/>
</xsl:template>
<xsl:template match="pie:Invoice|pcm:Invoice|tpcm:Invoice|pie:Invoice">
<xsl:text>H01</xsl:text>
<xsl:apply-templates select="com:TypeCode"/>
<xsl:apply-templates select="com:ID"/>
<xsl:apply-templates select="//com:BuyerParty[1]/com:AccountCode"/>
<xsl:call-template name="SubAccount"/>
<xsl:call-template name="SellersRef"/>
<xsl:call-template name="BuyersRef"/>
<xsl:apply-templates select="com:IssueDate"/>
<xsl:apply-templates select="com:PaymentMeans/com:PaymentDueDate"/>
<xsl:call-template name="BuyersOrderID"/>
<xsl:call-template name="BuyersOrderDate"/>
<xsl:call-template name="SellersID"/>
<xsl:call-template name="DeliveryCode"/>
<xsl:call-template name="PaymentID"/>
<xsl:call-template name="ReferenceFields"/>
<xsl:text>
</xsl:text>
<xsl:text>
</xsl:text>
<!-- Leveringsadresse -->
<!-- <xsl:text>H02</xsl:text> -->
<xsl:apply-templates select="com:InvoiceLine"/>
<xsl:apply-templates select="com:LegalTotals"/>
<xsl:text>
</xsl:text>
<xsl:text>
</xsl:text>
</xsl:template>
<xsl:template match="com:TypeCode">
<!-- TypeCode er eks. 380_H01 og der skal kun bruges 380, så overskydende fjernes -->
<xsl:value-of select="substring(//com:TypeCode,1,3)"/>
</xsl:template>
<xsl:template match="com:ID">
<!-- FakturaNr / KreditorNr-->
<xsl:value-of select="format-number(.,'00000000')" />
</xsl:template>
<xsl:template match="com:AccountCode">
<!-- Købers kontonr ved leverandør -->
<xsl:value-of select="substring(concat(., ' '), 1, 10)" />
</xsl:template>
<xsl:template match="com:IssueDate">
<!-- Faktura dato -->
<xsl:variable name='date'><xsl:value-of select="."/></xsl:variable>
<xsl:value-of select="substring($date,'1','2')"/>
<xsl:value-of select="substring($date,'3','2')"/>
<xsl:value-of select="substring($date,'6','2')"/>
<xsl:value-of select="substring($date,'9','2')"/>
</xsl:template>
<xsl:template match="com:PaymentDueDate">
<!-- Faktura forfaldsdato -->
<xsl:variable name='latedate'><xsl:value-of select="."/></xsl:variable>
<xsl:value-of select="substring($latedate,'1','2')"/>
<xsl:value-of select="substring($latedate,'3','2')"/>
<xsl:value-of select="substring($latedate,'6','2')"/>
<xsl:value-of select="substring($latedate,'9','2')"/>
</xsl:template>
<xsl:template name="SubAccount">
<!-- Underkonto -->
<xsl:text> </xsl:text><!-- bemærk at denne info ikke eksisterer i xml filen-->
</xsl:template>
<xsl:template name="SellersRef">
<!-- Sælgers ref -->
<xsl:text> </xsl:text><!-- bemærk at denne info ikke eksisterer i xml filen-->
</xsl:template>
<xsl:template name="BuyersRef">
<!-- Købers ref -->
<xsl:text> </xsl:text><!-- bemærk at denne info ikke eksisterer i xml filen-->
</xsl:template>
<xsl:template name="BuyersOrderID">
<!-- Købers ordrenr - bruges ikke i formatet endnu -->
<xsl:text> </xsl:text><!-- bemærk at denne info ikke eksisterer i xml filen-->
</xsl:template>
<xsl:template name="BuyersOrderDate">
<!-- Købers ordredato - bruges ikke i formatet endnu -->
<xsl:text> </xsl:text><!-- bemærk at denne info ikke eksisterer i xml filen-->
</xsl:template>
<xsl:template name="SellersID">
<!-- Sælgers ordrenr -->
<xsl:value-of select="substring(concat(//com:InvoiceLine[1]/com:ReferencedOrderLine/com:SellersID, ' '), 1, 10)" />
</xsl:template>
<xsl:template name="DeliveryCode">
<!-- Lev måde kode -->
<xsl:text> </xsl:text><!-- bemærk at denne info ikke eksisterer i xml filen-->
</xsl:template>
<xsl:template name="PaymentID">
<!-- BetalingsID - bruges ikke i formatet endnu -->
<xsl:text> </xsl:text><!-- bemærk at denne info ikke eksisterer i xml filen-->
</xsl:template>
<xsl:template name="ReferenceFields">
<!-- Ref felter -->
<xsl:value-of select="substring(concat(//com:InvoiceLine[1]/com:ReferencedOrderLine/com:SellersID, ' '), 1, 100)" />
<!--<xsl:text> </xsl:text>bemærk at denne info ikke eksisterer i xml filen-->
</xsl:template>
<!-- ################################ INVOICELINE ################################### -->
<xsl:template match="com:InvoiceLine">
<!-- LinjeType -->
<xsl:text>L01</xsl:text>
<!-- VarenummerArt -->
<xsl:variable name="varenummerart" select="com:Item/com:SellersItemIdentification/com:ID" />
<xsl:value-of select="format-number($varenummerart,'00')" />
<!-- Varenummer (kundens) -->
<xsl:variable name="varenummer" select="com:Item/com:ID" />
<xsl:value-of select="substring(concat($varenummer,' '), 1, 20)" />
<!-- Varetekst1 -->
<xsl:variable name="varetekst" select="com:Item/com:Description" />
<xsl:value-of select="substring(concat($varetekst,' '), 1, 35)" />
<!-- Varetekst2 -->
<xsl:text> </xsl:text>
<!-- Leveret Enheder -->
<xsl:variable name="enheder" select="com:InvoicedQuantity" />
<xsl:value-of select="format-number($enheder,'0000000000.00')" />
<!-- Enhed -->
<xsl:variable name="enhed" select="com:InvoicedQuantity/@unitCode" />
<xsl:value-of select="substring(concat($enhed,' '), 1, 3)" />
<!-- Pris per enhed FØR evt rabat / Bruttopris -->
<xsl:variable name="bruttoprisEnhed" select="com:BasePrice/com:PriceAmount" />
<xsl:value-of select="format-number($bruttoprisEnhed,'0000000000.00')" />
<!-- Pris per enhed EFTER evt rabat / Nettopris-->
<xsl:variable name="nettoprisEnhed" select="com:BasePrice/com:PriceAmount" />
<xsl:value-of select="format-number($nettoprisEnhed,'0000000000.00')" />
<!-- Rabat kode - denne er altid 0 da der altid leveres en rabat proces, se dokumentation for mere info-->
<xsl:text>0</xsl:text>
<!-- Rabat beløb SKAL RETTES!!!!! -->
<xsl:value-of select="format-number(0000000000000,'0000000000.00')" />
<!-- Linjesum brutto -->
<xsl:variable name="linjesumbrutto" select="com:Note" />
<xsl:value-of select="format-number($linjesumbrutto,'0000000000.00')" />
<!-- Linjesum netto -->
<xsl:variable name="linjesumnetto" select="com:LineExtensionAmount" />
<xsl:value-of select="format-number($linjesumnetto,'0000000000.00')" />
<!-- Antal længder -->
<xsl:text> </xsl:text>
<!-- Meter pr længde -->
<xsl:value-of select="format-number('00','00.00')" />
<!-- Købers ordrelin ref -->
<xsl:text> </xsl:text>
<!-- Prisfaktor -->
<xsl:variable name="prisfaktor" select="com:Item/com:BasePrice/com:BaseQuantity" />
<xsl:value-of select="format-number($prisfaktor,'000000')" />
<!-- Linjeskift -->
<xsl:text>
</xsl:text>
</xsl:template>
<xsl:template match="com:LegalTotals">
<!-- LinjeType -->
<xsl:text>S01</xsl:text>
<!-- Fakturasum, beloeb uden moms-->
<xsl:value-of select="format-number(//com:LegalTotals/com:LineExtensionTotalAmount,'0000000000.00')" />
<!-- moms beloeb -->
<xsl:value-of select="format-number(//com:TaxTotal/com:TaxAmounts/com:TaxAmount,'0000000000.00')"/>
<!-- beloeb total inkl moms-->
<xsl:value-of select="format-number(//com:LegalTotals/com:ToBePaidTotalAmount,'0000000000.00')"/>
</xsl:template>
</xsl:stylesheet>