webForumDet fria alternativet

Ladda in externa style sheets och xml-länkar

HTML & CSSur HTML, XHTML & CSS

24 svar · 782 visningar · startad av echoSwe

echoSweMedlem sedan nov. 20041 189 inlägg
#1
  1. Jag har börjat skicka mina XHTML 1.0 Transitional sidor med ContentType="application/xhtml+xml" i ASP .Net (ASP .Net har inget med frågan att göra)
    
XML Parsing Error: not well-formed Location: 
<a 
href="http://www.designsnack.com/index.php?category=portfolios& amp;sortby=id& amp;order=desc& amp;rows=0" title="DesigSnack" 
rel="external">DesignSnack</a>

Hur löser jag detta?
Den är rätt encod-ad redan, bara ignorera mellanrummen i strängen.

Det är här den pekar:

category=portfolios

precis på =-tecknet.

  1. Detta ska vara sättet att ladda in CSS i dokument:
    
<?xml-stylesheet href="#loadExternal" type="text/css"?>

men det fungerar inte i Firefox... Någon som vet varför eller hur?
Jag prövade det i Opera 8 Beta, och där fungerar det som det ska. Fungerar det på Mac och tidigare Opera verisoner?

zcorpanMedlem sedan dec. 20042 245 inlägg
#2
category="portfolios"
<?xml-stylesheet href="minstilmall.css" type="text/css"?>

?

echoSweMedlem sedan nov. 20041 189 inlägg
#3

Du kan ju självklart inte skriva category="portfolios" om det är i ett attribut! Då skulle vi ju stänga attributet samtidigt.

Jag skrev fel innan.
<?xml-stylesheet href="minstilmall.css" type="text/css"?>
funkar inte. Det är det som är problemet.

zcorpanMedlem sedan dec. 20042 245 inlägg
#4

Works for me.

test.xhtml:

<?xml-stylesheet href="minstilmall.css" type="text/css"?>
<p xmlns="http://www.w3.org/1999/xhtml"><a 
  href="http://www.designsnack.com/index.php?category=portfolios&amp;amp;sortby=id&amp;amp;order=desc&amp;amp;rows=0"  
  title="DesigSnack" 
  rel="external">DesignSnack</a></p>

minstilmall.css:

a { color: red; }
PaceMedlem sedan juni 20019 024 inlägg
#5

Re: Ladda in externa style sheets och xml-länkar

echoSwe skrev:

  1. Jag har börjat skicka mina XHTML 1.0 Transitional sidor med ContentType="application/xhtml+xml" i ASP .Net (ASP .Net har inget med frågan att göra)
    

I 99 % av fallen kommer det inte att fungera. Det är ju "ny" teknik som inte implementerats överallt än. Vänta två, tre år innan du använder den contenttypen.

echoSweMedlem sedan nov. 20041 189 inlägg
#6

Fungerar bara för mig i Opera. Inte i Firefox, trots senaste versionen.

<%@ Page language="c#" ContentType="application/xhtml+xml" ResponseEncoding="iso-8859-1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>xml style sheet</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<?xml-stylesheet href="myStyleSheet.css" type="text/css"?>
</head>

<body>
<p>This text is red please</p>
</body>
</html>

Pace: Joo, kanske. Jag tänker sätta upp så att bra webbläsare i alla fall får den content typen och IE får text/html istället.
Det är ju skoj att ha det med från början på min webbsida ;).

PaceMedlem sedan juni 20019 024 inlägg
#7

echoSwe skrev:

Pace: Joo, kanske. Jag tänker sätta upp så att bra webbläsare i alla fall får den content typen och IE får text/html istället.
Det är ju skoj att ha det med från början på min webbsida ;).

Jo, om du inte vill ha besökare (eller rättare sagt, bara teknikfluktande besökare med den senaste betan av en webbläsare som ingen normal människa använder eller hört talas om).

Det är samma mentalitet som att "Du måste ha upplösningen 1024 x 768 pixlar och Internet Explorer 6 för att kunna se den här webbsidan".

Ny teknik ska man aldrig använda förrän det har blivit etablerat.

echoSweMedlem sedan nov. 20041 189 inlägg
#8

Jag ska inte använda den xml-stylesheet includen som vi har diskuterat nu... sidan ska gå att titta på i IE5 om man vill det

PS: (men den kommer inte se hur snygg som helst ut i IE5 dock)

TinwëlintMedlem sedan maj 2004451 inlägg
#9

Pace skrev:

echoSwe skrev:

Pace: Joo, kanske. Jag tänker sätta upp så att bra webbläsare i alla fall får den content typen och IE får text/html istället.
Det är ju skoj att ha det med från början på min webbsida ;).

Jo, om du inte vill ha besökare (eller rättare sagt, bara teknikfluktande besökare med den senaste betan av en webbläsare som ingen normal människa använder eller hört talas om).

Det är samma mentalitet som att "Du måste ha upplösningen 1024 x 768 pixlar och Internet Explorer 6 för att kunna se den här webbsidan".

Ny teknik ska man aldrig använda förrän det har blivit etablerat.

Och om alla webbutvecklare resonerar så kommer det att dröja ytterligare evigheter innan tekniken blir etablerad. Någon måste visa vägen. Någon måste sätta press på webbläsartillverkarna (läs MS). Om man bara säger:
"Det här är ny bra teknik, den skulle vi använda om någon kände till den och alla webbläsare hade stöd för den" så kommer det att dröja väldigt länge innan någon känner till den och alla webbläsare har stöd för den.

r:
Och förresten så har ju echoSwe påpekat flera gånger att han inte tänker utesluta användare på grund av det här. Det går faktiskt att skicka olika dokument till olika webbläsare.

zcorpanMedlem sedan dec. 20042 245 inlägg
#10

PIn ska vara i prologen, före DOCTYPEn... ;) Det borde se ut såhär:

<?xml version="1.0" encoding="iso-8859-1"?>
<?xml-stylesheet href="myStyleSheet.css" type="text/css"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>xml style sheet</title>
</head>

<body>
<p>This text is red please</p>
</body>
</html>
echoSweMedlem sedan nov. 20041 189 inlägg
#11

Koka lite te och sätt er tillrätta.

Tinwëlint: Tack för den kommentaren! Tänkte precis på det du sade när jag satt och åt, och funderade på om jag inte skulle gå tillbaka och säga att någon måste börja med den nya tekniken ;).

Zcorpan: Tack för lösningen. Jag har ett inlägg i XML också - där jarvklo också gav den lösningen! Vet ni två (och alla andra) om <?xml-stylesheet fungerar i IE (ska kolla snart)?

Jarvklo: Samma som ovan; tack för lösningen. Jag ska genast kolla om det fungerar i IE också. Visste inte att man kunde skriva på det sättet här i forumet, hehe. Något att tänka på... Vet du förresten varför min hyperlänk inte fungerade? (Firefox sade ju "not well formed")
Sen, också, jarvklo... Du säger att jag ska ha med en <?xml version ---?>
Men det är så att jag skickar med lite av den informationen i headern:

<%@ Page Language="C#" 
ContentType="application/xhtml+xml" 
ResponseEncoding="iso-8859-1" Inherits="Normal" 
Src="Default.cs" %>

och om jag lägger till

<?xml version="1.0" encoding="iso-8859-1"?>

i början får jag det felet som jag har bifogat!
Alltså fungerar det inte riktigt då.
Testade precis med <?xml-stylesheet i Firefox. Fungerar.
Det fungerar inte i Internet Explorer.

(nu får jag hoppas att min session inte tar slut [expires] så jag måste skriva om allt det här :))

@nders: Eftersom min lösning, eller snarare hela det här problemet handlar om ASP .Net med C#, XML, XHTML, CSS och validatorer så tyckte jag att den kunde passa i olika forum. Och om jag ska vara ärlig så trodde inte jag att jag skulle få så många svar i XML forumet med tankte på hur många inlägg det finns där. I alla fall så har det löst sig nu ;) (förutom min länk som har variabler i sig) -- så alla är väl glada? :)

Okej...
Här är då min lösning. Om jag börjar med att visa hur jag fick med mina style sheets.

<style type="text/css" id="loadExternal">
		@import url(styles/1.css) all;
		@import url(styles/1-print.css) print;
	</style>

fungerar inte i IE. Alltså går inte det.

Fick skriva både ovanstående och

<link href="styles/1.css"type="text/css" rel="stylesheet" />

för att få det att fungera i IE.

Nu är min CSS inkluderad. Mitt dokument validerar (hrrm, m_soderlund ;)) och mozilla och opera visar den. Problemet är fortfarande IE.

Så... Allt hänger alltså på vilka doctypes som webbläsarna accepterar. Dessa kan fås genom:

string httpAccept = Request.ServerVariables["HTTP_ACCEPT"];

i asp och asp.net. Vi måste ju skicka olika headers till olika webbläsare.

Läste den här artikeln:
http://www.456bereastreet.com/archive/200501/the_perils_of_using_xhtml_properly/
men han använder PHP till att fixa det. Så jag började googla.

Hittade dessa:
http://www.aspnetresources.com/blog/aspnet_xhtml_content_types.aspx
och även (inte lika bra cache hantering, som jag självklart vill ha)
http://charlvn.blogspot.com/2004/07/simple-aspnet-content-negotiation-for.html#previous

Men jag visste inte vad en http-modul var för något.
Gissade först att den lades i Global.asax, men det stämmer ju inte. För det första ska de registreras i web.config: (skickar hela min egna web.config som även använder Server.Encode() på rätt språk --> svenska)

<configuration>
    <system.web>
        <customErrors mode="RemoteOnly"/>
		<globalization fileEncoding="iso-8859-1" 
requestEncoding="iso-8859-1" 
responseEncoding="iso-8859-1" culture="sv-SE" 
uiCulture="sv-SE" />
		<httpModules>
            <add name="ContentType" type="ContentType, ContentType" />
        </httpModules>

	</system.web>
</configuration>

Min modul heter alltså ContentType, och är nu registrerad. Används varje gång en sida hämtas.

Men vi måste ha koden till modulen också:

using System;
using System.Web; 
using System.Collections;

public class ContentType : IHttpModule 
{

	public void Init(System.Web.HttpApplication application) 
	{
		application.PreSendRequestHeaders += 
		new EventHandler(this.Application_PreSendRequestHeaders);
	}

	private void Application_PreSendRequestHeaders (object sender, System.EventArgs e) 
	{
		HttpApplication app = ((HttpApplication)(sender));
		HttpContext context = app.Context;
		
		if (context.Request.Browser.Browser.ToUpper ().IndexOf("IE")==-1)
			context.Response.ContentType = "application/xhtml+xml";
		else context.Response.ContentType = "text/html";
	}

	public void Dispose() {}
}

och jag hoppas att ni kan C#, annars är det kopiera och klistra in som gäller. Spara som ContentType.cs

Sen går du inte i kommandoprompten och lägger dig i din applikations root och skriver:

csc /t:library /out:D:\mapp\applikationsRoot\bin\ContentType.dll 
/r:System.Web.dll /r:System.dll 
/recurse:ContentType.cs

Du har nu en dll fil i din bin-katalog. ASP .Net söker efter den filen i och med att du har angett ContentType som HttpModule i din web.config fil.
Nu kommer alla webbläsare som inte inte hittar IE i sin webbläsarsträng att få application/xhtml+xml serverat.
(Jag ska fixa så att man använder Request.ServerVariables["HTTP_ACCEPT"]; istället för att inte stänga ute googlebot och andra gamla (t.ex. netscape < 6) och så)

Sen ska det förhoppningsvis fungera i både IE och Firefox!

Vad tycks ;)?

EDIT:
IE verkar inte klara när man har <?xml-stylesheet ... i början av sidan, utan visar ENBART vissa delar (inte alla) av style sheetet. Så jag var tvungen, nu, att plocka bort xml-stylesheet from början och från <style> elementet, och enbart ha det i en <link ...> för att IE ska visa det som det är tänkt (Firefox och Opera klarar det bra ändå). Och det är ju faktiskt inte så stor uppoffring i och med att <link> också validerar.

EDIT 2:
Nu är hela sidan uppdaterad på internet också! Kolla gärna lite på den om ni inte redan har gjort det. Ni kan kolla koden också om ni vill.

EDIT 3:
Kom på att jag var tvungen att skriva:

body {
	background:#000 url(../images/layout/shadow.png) left top repeat-y;
	margin: 0px;
	padding: 0px;
	/* In order to make application/xhtml+xml work properly */
	position: absolute; 
	top: 0px; 
	width: 100%; 
	min-height: 100%
        /*End xhtml thingy */
}

för att få det att fungera med bakgrundsbilden.

echoSweMedlem sedan nov. 20041 189 inlägg
#12

Den ville inte bifoga förra gången.

xmlcodeblockstart.jpg
jarvkloMedlem sedan juli 20013 378 inlägg
#13

echoSwe skrev:

Sen, också, jarvklo... Du säger att jag ska ha med en <?xml version ---?>
Men det är så att jag skickar med lite av den informationen i headern:
[..]
och om jag lägger till

<?xml version="1.0" encoding="iso-8859-1"?>

i början får jag det felet som jag har bifogat!
Alltså fungerar det inte riktigt då.

Jodå - men du måste se till att det som verkligen går ut till webbläsaren är exakt så som zcorpan och jag skrev - och om det är så eller ej framgår inte av det du skärmdumpade...

Och för oss som inte är så bevandrade i C# och .NET...
Gör en "view source" på det som genererar felet du visar upp i din bifogade fil och ta sedan en skärmdump på rad ett av *den* koden istället så skall vi se vad felet på rad 2 egentligen är - förmodligen står där helt enkelt ett &-tecken nånstans i slutet på rad 1 eftersom den får för sig att <?xml?>-deklarationen är en del av ett "external entity" ;)

En xml-prolog (<?xml...?>-tagg) måste ligga i den absoluta början av filen för att inte MSIE skall kräkas på den - rad 2 (som i din skärmdump) är oavsett hur rad ett ser ut inte bra nog ;)

echoSweMedlem sedan nov. 20041 189 inlägg
#14

Nej, ie kräks i vilket fall som helst, och mozilla firefox kräks om den inte är högst upp, men klarar av att visa all css OM den är högst upp.
Kolla bifogad. Firefox klarar både utan och med.

iexml.jpg
echoSweMedlem sedan nov. 20041 189 inlägg
#15

Usch! Det här kommer jag inte göra om på mycket lång tid!!

zcorpanMedlem sedan dec. 20042 245 inlägg
#16

xml-stylesheet fungerar med IE, men endast för XML-dokument... Om du serverar text/html till IE så är det inte XML, utan HTML. Och då är det STYLE eller LINK som gäller ;) Du kan göra så att när du serverar text/html så tar du bort allt före doctypen. :)

Agenter som förstår namnrymden "http://www.w3.org/1999/xhtml" förstår förmodligen också innebörden av LINK och STYLE-elementen, så du behöver inte strula med PIn... ;) Dock kanske det känns bättre att använda det som redan finns i XML (xml-stylesheet, xml:lang och så vidare) än att förlita sig på en namnrymd.

En notis bara: <?xml ... ?> är en XML-deklaration, <?xml-stylesheet ... ?> är en Processing instruction (PI). En prolog är allt som ligger före rotelementet i dokumentet. Tex följande är en prolog:

<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="style.css"?>
<!DOCTYPE test SYSTEM "test.dtd">
<!-- Orkade inte skriva en hel XHTML doctype ;). Denna kommentar tillhör också prologen. -->
echoSweMedlem sedan nov. 20041 189 inlägg
#17

Tja. Alltså funkar <?xml-stylesheet ... ?> inte med xhtml+xml i IE. Så jag måste ändå ha <link> eller <style>.
Hur tar jag bort allt innan doctypen då? ;)

Agenter som förstår namnrymden "http://www.w3.org/1999/xhtml" förstår förmodligen också innebörden av LINK och STYLE-elementen, så du behöver inte strula med PIn... Dock kanske det känns bättre att använda det som redan finns i XML (xml-stylesheet, xml:lang och så vidare) än att förlita sig på en namnrymd.

När du pratar om PIn - menar du då min <?xml-stylesheet ... ?> eller vad? jag förstår inte riktigt vad du säger.. :s

Är ett xml-stylesheet XSL? Eller vad är det då i sin tur?

zcorpanMedlem sedan dec. 20042 245 inlägg
#18

Så vitt jag vet fungerar inte application/xhtml+xml med IE över huvud taget... :) IE tar dock emot text/xml och application/xml, men fortfarande saknar den stöd för XHTML.

Det borde vara ganska lätt att med en IF-sats i ASP skriva ut det, beroende på din Content-Type... Nu är jag inte så hemma på ASP men jag kan skriva hur det ser ut i PHP:

<?php
$charset = 'utf-8';

if (stristr($_SERVER['HTTP_ACCEPT'],'application/xhtml+xml')) 
 $xhtml = true;
else
 $xhtml = false;

if ($xhtml == true) {
 header ("Content-Type: application/xhtml+xml; charset=$charset");
 echo "<?xml version=\"1.0\" encoding=\"$charset\"?>\n";
 echo "<?xml-stylesheet type=\"text/css\" href=\"style.css\"?>\n";
} else {
 header ("Content-Type: text/html; charset=$charset");
}
?>

:)

zcorpanMedlem sedan dec. 20042 245 inlägg
#19

När du pratar om PIn - menar du då min <?xml-stylesheet ... ?> eller vad?

Japp :)

Är ett xml-stylesheet XSL? Eller vad är det då i sin tur?

Nej... Däremot kan man länka in XSL-dokument med en PI precis som med CSS-dokument. :)

PaceMedlem sedan juni 20019 024 inlägg
#20

Tinwëlint skrev:

Och om alla webbutvecklare resonerar så kommer det att dröja ytterligare evigheter innan tekniken blir etablerad. Någon måste visa vägen. Någon måste sätta press på webbläsartillverkarna (läs MS). Om man bara säger:
"Det här är ny bra teknik, den skulle vi använda om någon kände till den och alla webbläsare hade stöd för den" så kommer det att dröja väldigt länge innan någon känner till den och alla webbläsare har stöd för den.

Så de påtryckningsmedel du föreslår är personer som gör en liten hemsida som inte fungerar någonstans. ;) Nja, press ska absolut sättas på dem, men det borde vara ett myndighetsansvar. Vi har ju redan W3C som sätter spelreglerna.

Det är inte webbansvarigas uppgift att påpeka det för webbläsarföretagen. Och att göra webbplatser som inte ens fungerar i dagsläget sätter inte "press" på dem. Det idiotförklarar bara de som använt den nya tekniken eftersom det inte fungerar någonstans. Det är som att börja använda CSS3 redan nu.

All ny teknik har barnsjukdomar, webben är knappast något undantag. Man har inte råd att satsa pengar på något okänt.

Tinwëlint skrev:

Och förresten så har ju echoSwe påpekat flera gånger att han inte tänker utesluta användare på grund av det här. Det går faktiskt att skicka olika dokument till olika webbläsare.

Det är bra. Men varför har man då två versioner?! Det räcker väl med den som fungerar med dagens teknik! ;)

147 ms totalt · 3 externa anrop · v20260731065814-full.29ac60f6
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
145 ms — hämta tråd, inlägg och bilagor (db)