Avatar billede decrypto Nybegynder
04. september 2008 - 16:21 Der er 16 kommentarer og
1 løsning

Lave et objekt til XML og parre det med en xslt fil

Jeg har en ganske almindelig klasse, der indeholder data. Jeg vil gerne lave dette objekt til en xml fil og parre den med en xslt fil, der transformere xml'en til noget html.

Har ledt efter et simpelt eksempel men uden held....
er der een der kan vise hvordan man gør?
Avatar billede decrypto Nybegynder
04. september 2008 - 17:02 #1
Det er naturligvis i c#...
Avatar billede arne_v Ekspert
04. september 2008 - 17:10 #2
Foerst XmlSerializer og saa en transformering ?
Avatar billede decrypto Nybegynder
04. september 2008 - 17:30 #3
Jeps :)
Det er planen...
Avatar billede decrypto Nybegynder
04. september 2008 - 17:31 #4
Min xslt er allerede klar....nu mangler jeg bare at generere min xml fra min klasse der holder data, og så pege mod min xslt, der så tranformerer det.
Avatar billede arne_v Ekspert
04. september 2008 - 17:42 #5
Simpelt eksempel:

using System;
using System.IO;
using System.Xml;
using System.Xml.Xsl;
using System.Xml.Serialization;

namespace E
{
    public class Data
    {
        private int iv;
        private string sv;
        public Data() : this(0, "")
        {
        }
        public Data(int iv, string sv)
        {
            this.iv = iv;
            this.sv = sv;
        }
        public int Iv
        {
            get { return iv; }
            set { iv = value; }
        }
        public string Sv
        {
            get { return sv; }
            set { sv = value; }
        }
    }
    public class Program
    {
        public static string Object2Xml(object o)
        {
            XmlSerializer ser = new XmlSerializer(o.GetType());
            StringWriter sw = new StringWriter();
            ser.Serialize(sw, o);
            return sw.ToString();
        }
        public static string Xml2Html(string xml, string xsl)
        {
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(xml);
            XslCompiledTransform xslt = new XslCompiledTransform();
            xslt.Load(new XmlTextReader(new StringReader(xsl)), null, null);
            StringWriter sw = new StringWriter();
            XmlTextWriter wrt = new XmlTextWriter(sw);
            wrt.Formatting = Formatting.Indented;
            xslt.Transform(doc,  wrt);
            return sw.ToString();
        }
        public static void Main(string[] args)
        {
            string dataxsl = @"<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>

<xsl:template match='/Data'>
<a>
<xsl:attribute name='href'><xsl:value-of select='Sv'/></xsl:attribute>
<xsl:value-of select='Iv'/>
</a>
</xsl:template>

</xsl:stylesheet>";
            Data o = new Data(123, "page123.html");
            string xml = Object2Xml(o);
            Console.WriteLine(xml);
            string html = Xml2Html(xml, dataxsl);
            Console.WriteLine(html);
            Console.ReadKey();
        }
    }
}
Avatar billede decrypto Nybegynder
04. september 2008 - 18:05 #6
Ehhm bare et lille dumt spørgsmål, hvorfor har du lavet din xslt i din c# kode? Hvis det er blot for eksemplets skyld, så kunne jeg gerne tænke mig at se hvordan du ellers kan pege på filen på et filsystem fx: "c:\min.xslt"...

Ellers mange tak...prøver lige at følge dit eksempel efter aftensmaden...
Avatar billede arne_v Ekspert
04. september 2008 - 18:08 #7
Det bar bare for at at lave hele eksemplet i en enkelt fil.

xslt.Load(new XmlTextReader(new StringReader(xsl)), null, null);

->

xslt.Load(new XmlTextReader(new StreamReader(@"C:\data.xsl)), null, null);

vil skifte til at laese fra en fil (saa skal det metode argumentet naturligvis ogsaa
fjernes)
Avatar billede decrypto Nybegynder
04. september 2008 - 18:14 #8
Ok, prøver lige...
Avatar billede decrypto Nybegynder
04. september 2008 - 18:48 #9
Hmmm lidt svært ved at få min xsl peget ud....
Her er hvad jeg har fået bikset sammen.

using System;
using System.Data;
using System.IO;
using System.Xml;
using System.Xml.Xsl;
using System.Xml.Serialization;
using Entities;

namespace E
{

    public class Program
    {
        public static string Object2Xml(object o)
        {
            XmlSerializer ser = new XmlSerializer(o.GetType());
            StringWriter sw = new StringWriter();
            ser.Serialize(sw, o);
            return sw.ToString();
        }

        public static string Xml2Html(string xml, string xsl)
        {
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(xml);
            XslCompiledTransform xslt = new XslCompiledTransform();
            xslt.Load(new XmlTextReader(new StringReader(xsl)), null, null);
            StringWriter sw = new StringWriter();
            XmlTextWriter wrt = new XmlTextWriter(sw);
            wrt.Formatting = Formatting.Indented;
            xslt.Transform(doc, wrt);
            return sw.ToString();
        }

        public static void Main(string[] args)
        {
            Banner banner = new Banner();
            banner.Id = "1";
            banner.ImgRef = "/img/image0001.jpg";
            banner.Text = "Her kommer der noget banner relateret tekst.";
            banner.Url = "http://www.fasil.dk";

            XslCompiledTransform xslt = new XslCompiledTransform();
            xslt.Load(new XmlTextReader(new StreamReader(@"C:\banner.xsl")), null, null);

            string xml = Object2Xml(banner);
            Console.WriteLine(xml);
            string html = Xml2Html(xml, dataxsl); <- Brokker sig iver dataxsl
            Console.WriteLine(html);
            Console.ReadKey();
        }
    }
}
Avatar billede decrypto Nybegynder
04. september 2008 - 18:48 #10
Ved ikke lige hvad der skal stå derinde...
Avatar billede decrypto Nybegynder
04. september 2008 - 18:52 #11
Ok kan se at xml'en bliver dannet fint nok...
Avatar billede decrypto Nybegynder
04. september 2008 - 19:11 #12
Ahh jeg fik det til at virke...skulle lige omstrukturere i koden....mange tak...
Smid bare eet svar ind til point ;)
Avatar billede arne_v Ekspert
04. september 2008 - 19:19 #13
OK
Avatar billede decrypto Nybegynder
05. september 2008 - 13:02 #14
Hvordan kan man angive at det er xml i UTF-8 man vil have ud?
Avatar billede arne_v Ekspert
05. september 2008 - 15:22 #15
Argh. Ja - StringWriter er meget glad for at angive encoding UTF-16 !

Nemmeste er hvis du har mulighed for at skrive til den endelige stream med det samme.

Ellers kan den cuttes vaek.

Jeg mener ikke at man har mulighed for at angive ENcoding til en StringWriter, fordi
det giver ikke nogen mening.
Avatar billede decrypto Nybegynder
05. september 2008 - 15:50 #16
Hvad er grunden til at IE ikke kan vise xml'en? Den kan den umiddelbart, når jeg retter i xml filen manuelt fra utf-16 til utf-8. Firefox har ingen problemer...
Avatar billede arne_v Ekspert
06. september 2008 - 22:12 #17
Hvis filen ikke er i UTF-16, saa er det vel ikke så mærkeligt.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester