Avatar billede kapoou Nybegynder
29. april 2009 - 16:34 Der er 10 kommentarer

Ændre værdig i output

Er der nogen måde jeg kan ændre doctype dynamisk i følgende output.

<xsl:output method="html" name="doctype" doctype-system="http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd"
      doctype-public="-//W3C//DTD XHTML Basic 1.0//EN" />

Jeg vil gerne kunne ændre denne alt efter klienten der læser siden.
Avatar billede arne_v Ekspert
29. april 2009 - 16:50 #1
Din transformering laves client side i JavaScript ?

Jeg vil tro at du bliver noedt til at kode noget JavaScript til det. Eventuelt et callout.
Avatar billede kapoou Nybegynder
29. april 2009 - 16:57 #2
Nej jeg har nu ikke noget JS med på siden. Det hele kører fra en c# kode om bruger xsl filen.
Avatar billede arne_v Ekspert
29. april 2009 - 17:08 #3
OK - saa det er server side.

Hent den client identifikation du skal bruge fra Request objektet og lav en callout i din XSL til noget C# der bruger den client identifikation.
Avatar billede kapoou Nybegynder
29. april 2009 - 21:21 #4
Jeg er ikke super skarp til xsl endnu så du bliver nok nødt til at fortælle mig hvordan jeg laver denne callout. Hvis jeg nu i C# koden har fundet frem til hvilken doctype det er jeg vil bruge hvordan skal jeg så få denne ud på siden?
Avatar billede arne_v Ekspert
30. april 2009 - 04:46 #5
Til inspiration:

using System;
using System.IO;
using System.Xml;
using System.Xml.XPath;
using System.Xml.Xsl;

namespace E
{
    public class Util
    {
        public string DocType()
        {
            return @"<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.0 Strict//EN"" ""http://www.w3.org/TR/xhtml1/DTD/Strict.dtd"">";
        }
    }
    public class MainClass
    {
        public static void Main(string[] args)
        {
            string input =
@"<something>
    <data>ABC</data>
</something>";
            string transform =
@"<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
                xmlns:ms='urn:schemas-microsoft-com:xslt'
                xmlns:cs='urn:arne:cs'
                version='1.0'>
             
<xsl:template match='something'>
<xsl:value-of disable-output-escaping='yes' select='cs:DocType()'/>
<html>
<head>
<title>Demo</title>
</head>
<body>
<p>Data = <xsl:value-of select='data/text()'/></p>
</body>
</html>
</xsl:template>

</xsl:stylesheet>";
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(input);
            XslCompiledTransform xslt = new XslCompiledTransform();
            xslt.Load(new XmlTextReader(new StringReader(transform)), new XsltSettings(true, true), null);
            StringWriter sw = new StringWriter();
            XmlTextWriter wrt = new XmlTextWriter(sw);
            wrt.Formatting = Formatting.Indented;
            XsltArgumentList xal = new XsltArgumentList();
            xal.AddExtensionObject("urn:arne:cs", new Util());
            xslt.Transform(doc, xal, wrt);
            Console.WriteLine(sw.ToString());
            Console.ReadKey();
        }
    }
}
Avatar billede kapoou Nybegynder
04. maj 2009 - 15:31 #6
Tak for svaret. Jeg kan dog ikke få den til at skrive det up på siden. Jeg har bruger et eksternt xsl ark til tranformationen. Kan det have noget med det at gøre? Jeg oplever desuden at hvis jeg i xsl arket har skrevet

<link rel="stylesheet" type="text/css" media="all" href="/files/global/system/stylesheet/styles.css"/>

eller

<link rel="stylesheet" type="text/css" media="all" href="/files/global/system/stylesheet/styles.css"></link>


så fjerner den henholdvis / og </link> når den skriver det ud. Jeg bruger følgende kode til at transformere.

XhtmlTextWriter writer = new XhtmlTextWriter(Response.Output);
xslt.Transform(doc, xslArg, writer);
Avatar billede kapoou Nybegynder
04. maj 2009 - 15:38 #7
Det skal måske lige siges at
   
<META http-equiv="Content-Type" content="text/html; charset=utf-8">

automatisk bliver sat ind i koden.

Jeg kan simpelthen ikke se hvordan jeg kan ændre dette til f.eks.

application/vnd.wap.xhtml+xml
Avatar billede jokkejensen Novice
11. maj 2009 - 14:35 #8
det med den lukker tags er fordi du har <xsl:output> sat til xml, og ikke html..

Personligt bruger jeg <xsl:text disable-output-escaping="yes"><[CDATA[]]></xsl:text>

Men du kan også bare lave et "tomt" tegn mellem <link> og </link>, ellers læser parseren det som en tom node, og lukker den korrekt.

/J
Avatar billede kapoou Nybegynder
11. maj 2009 - 17:05 #9
-> jokkejensen

Den er sat til

<xsl:output method="html" omit-xml-declaration="yes" encoding="UTF-8" />

Problemet er netop at

<link rel="stylesheet" type="text/css" media="all" href="/files/global/system/stylesheet/styles.css"></link>

bliver til

<link rel="stylesheet" type="text/css" media="all" href="/files/global/system/stylesheet/styles.css">

så den ikke er lukket.
Avatar billede jokkejensen Novice
12. maj 2009 - 13:49 #10
Nej, så skal du lave det til xml.. Eller udskrive det som xsl:text.

Men pas så på dine <script src="" />.. de skal lukkes the old way, ellers fucker <= ie7 totalt.

Altså <script src=""></script> og ikke <script src="" />.

/J
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
Kurser inden for grundlæggende programmering

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