Avatar billede dl Nybegynder
06. juni 2008 - 14:30 Der er 13 kommentarer og
1 løsning

XSLT Slå ikke igemmen ved loadning.

Jeg har et xml document og et XSLT document.
Hvis jeg indsætter  <?xml-stylesheet ...>  i mit xml document, og bagefter loader jeg xml documentet ind i XmlDocument, og der ser rigtig ud.

Nu vil jeg så loade XSLT og xml dynamisk. Men så går det også galt.
Jeg bruger denne kode:


            XmlDocument xml = new XmlDocument();
            xml.Load(@"C:\Documents and Settings\dl\Skrivebord\MineProjekter\DiffGram\Skema\xm2\test.xml");
             
            // Create a procesing instruction.
            XmlProcessingInstruction newPI;
            String PItext = "type=\"text/xsl\" href=\"test.xslt\"";
            newPI = xml.CreateProcessingInstruction("xml-stylesheet", PItext);
            xml.AppendChild(newPI);

            xml.Save(@"c:\text.xml");



Men mit stylesheet slå ikke igemmen. Den loader bare alle elementer. Og ikke kun dem som den skal. Og som den rigtig nok gør hvis jeg i xml filen, skriver hvilken stylesheet den skal bruge.

Hvordan løser jeg dette ?
Avatar billede arne_v Ekspert
06. juni 2008 - 15:12 #1
xml.Save gemmer XML dokument - den laver ikke en transformering.

Et eksempel paa transformering:

        XmlDocument doc = new XmlDocument();
        doc.Load(@"C:\test.xml");
        XslTransform xslt = new XslTransform();
        xslt.Load(@"C:\test.xsl");
        XmlTextWriter wrt = new XmlTextWriter(new StreamWriter(@"C:\test4.xml"));
        wrt.Formatting = Formatting.Indented;
        xslt.Transform(doc, null, wrt, null);
Avatar billede dl Nybegynder
06. juni 2008 - 15:15 #2
Ja, min fejl.
Dette XML document, skal sender over nettet. Og derfor skal jeg lave den her transformering  på serveren. Således at clienten ikke ser andet end, hvad der er dif. i xml-stylesheetet.

Men det må da kunne lade sig gøre, on the fly, så man ikke skal gemme en fil, for derefter at loade den, og sende den.
Avatar billede arne_v Ekspert
06. juni 2008 - 15:23 #3
Naturligvis.

Proev:

XmlTextWriter wrt = new XmlTextWriter(new StreamWriter(Response.OutputStream));
Avatar billede dl Nybegynder
06. juni 2008 - 15:56 #4
Man har ikke mulighed for at skrive derekte til en Xmldocument :)  så man kan igen har det i et pænt indpakket data strucktur ?
Avatar billede dl Nybegynder
06. juni 2008 - 16:06 #5
Denne kode virker, men det må da være nemmere end det ?

            XmlDocument doc = new XmlDocument();
            doc.Load(@"test.xml");
            XslTransform xslt = new XslTransform();
            xslt.Load(@"test.xslt");

            StringBuilder sb = new StringBuilder();
            xslt.Transform(doc, null, XmlWriter.Create(sb), null);

            XmlDocument xml = new XmlDocument();
            xml.LoadXml(sb.ToString());

Der er lige et lille problem, med noget uft-16 .. Men det er bare noget encodning.
Avatar billede arne_v Ekspert
06. juni 2008 - 16:24 #6
StringBuilder har det med at give UTF-16.
Avatar billede dl Nybegynder
06. juni 2008 - 16:52 #7
Skulle ikke være noget svært at løse :)  men er dette virkelig den beste måde at gøre det på ?
Avatar billede arne_v Ekspert
06. juni 2008 - 17:07 #8
Hvis du absolut vil have det over i et XmlDocument, saa kan det nok ikke
goeres meget nemmere.

Men hvorfor vil du have det over i et XmlDocument ?
Avatar billede dl Nybegynder
08. juni 2008 - 22:03 #9
Det er til en Webservice, hvor det skal sendes som xml.

Vores kunde, hente på nuværende tidspunkt, sådan et document, via java.
Så hvorfor ikke forsætte med at sende i sammeformat?
Avatar billede dl Nybegynder
08. juni 2008 - 22:04 #10
Kan du give et svar arne_v, så jeg kan lukke indlægget, når denne tråd er færdig debeteret.
Avatar billede dl Nybegynder
12. juni 2008 - 15:54 #11
arne_v  et svar, så jeg kan lukke.
Avatar billede arne_v Ekspert
12. juni 2008 - 16:13 #12
svar
Avatar billede arne_v Ekspert
12. juni 2008 - 16:14 #13
Jeg er ret sikker paa at det vil kunne bringes til at virke hvis du sendte en
XML content og ikke et XmlDocument object tilbage.
Avatar billede dl Nybegynder
13. juni 2008 - 08:48 #14
Ja, det har du sikkert ret i.
Men så visionær er vi desvære ikke :S
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