JS-Fehler beim benutzen von größer/kleiner im XSLT

Marine_of_Hell

Grünschnabel
Hallo!

Ich bin mittlerweile mit meinem Latein am Ende.
Wenn ich in meiner XSLT Datei JavaScript nutze und eine Abfrage einbaue mit größer oder kleiner Zeichen, bekomm ich JS-Error und im Quelltext wird das kleiner Zeichen als Beispiel mit < umgesetzt.
Das ist natürlich totaler Schwachsinn und da ist dann klar, dass ein JS Error erscheint. Hat den jemand von euch ne Idee, was ich da machen kann?

Hier mal der Entsprechende Programmcode:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

<xsl:template match="/">
<HTML>
<HEAD>
<TITLE>XML</TITLE>
<link rel="stylesheet" type="text/css" href="#!-- #STYLESHEETS:main.css --#" />
<script language="Javascript">
	<![CDATA[
		function zeige_pdf()
		{
			// Erstmal holen wir uns die aktuelle Location.
			var strLocation = document.location.href;
			var strDocID = strLocation.substr(91,13);
			strDocID = strDocID.toUpperCase();
			
			var band = strLocation.substr(78,3);
			band = parseInt(band);
			//alert(isNaN(band));
			
			// Abfragen ob das Band zwischen 1 und 100 liegt
			if(band >= 1) &l
			{
				var cid = "bla";
			}
			else
			{
				var cid = "bla2";
			}

			// Kurz abfragen ob wir im geteilten Fenster sind oder nicht.
			if(!top.main.documentfrm)
			{
				// Wir befinden uns also nicht im geteilten Fenster. Gut.
				if(top.main.docinfo)
				{
					top.main.document.getElementById("docframe").rows = "35,28,*";
				}
			}
			else
			{
				// Wir befinden uns also im geteilten Fenster. Auch egal.
				if(top.main.documentfrm.docinfo)
				{
					top.main.documentfrm.document.getElementById("docframe").rows = "35,28,*";
				}
			}
			//alert("?f=id$id=" + strDocID + ".pdf$t=document-frameset.htm$tf=docbody$cid=" + cid);
			document.location.href = "?f=id$id=" + strDocID + ".pdf$t=document-body.htm$tf=docbody$cid=" + cid;
		}
		]]>
	</script>
</HEAD>
<BODY bgcolor="#FFFFFF">
.....
 

Thomas Darimont

Erfahrenes Mitglied
Hallo!

Kannst es ja mal mit der XML Entität für das "<" Zeichen versuchen:

< --> "<"
> --> ">"

Aber sollte nicht alles was innerhalb eines <![[CDATA [ blabla ]]> sowieso als "roher" Text behandelt werden? Oder wars doch <![CDATA[ blablub ]]> ?

Gruß Tom
 

Marine_of_Hell

Grünschnabel
Hallo!

Erstmal danke für deine Antwort.
Wenn du mit der XML Entität die Codierung &lt; und &gt; meinst, ja das habe ich schon probiert.
Ansonsten wäre es nett, wenn du kurz ein Beispiel für eine XML-Entität mir hier reinschreiben könntest. :)

Mit CDATA, ja das dachte ich allerdings auch. Dem ist anscheinend aber nicht so. :(

Gruss
Marine_of_Hell

Edit:
Ich hab jetzt mal kurz nachgelesen, was du mit Entitäten meintest. Ja das mit der &lt; und &gt; hab ich schon probiert, ebenfalls kein Erfolg. :(
 
Zuletzt bearbeitet:

Thomas Darimont

Erfahrenes Mitglied
Hallo!

Code:
<?xml version="1.0"?>
<node>
	<subnode>
	10 & #60; 5 //Ohne Leerzeichen vo dem # Zeichen
	</subnode>
</node>

und

Code:
<?xml version="1.0"?>
<node>
	<subnode>
	10 &lt; 5
	</subnode>
</node>

Ergibt jeweils bei mir:

Code:
  <?xml version="1.0" ?> 
- <node>
  <subnode>10 < 5</subnode> 
  </node>

----------------------------------

Hier die modifizierte Verison die bei mir funktioniert:

Code:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Anderer Namespace und Versions Attribut hinzugefügt ...-->
<xsl:stylesheet version="1.0" 
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<HTML>
<HEAD>
<TITLE>XML</TITLE>
<link rel="stylesheet" type="text/xsl" href="#!-- #STYLESHEETS:main.css --#" />
<script language="Javascript">
	<![CDATA[
		function zeige_pdf()
		{
			// Erstmal holen wir uns die aktuelle Location.
			var strLocation = document.location.href;
			var strDocID = strLocation.substr(91,13);
			strDocID = strDocID.toUpperCase();
			
			var band = strLocation.substr(78,3);
			band = parseInt(band);
			//concat(isNaN(band));
			
			// Abfragen ob das Band zwischen 1 und 100 liegt
                        //Ausdruck in der if Bedingung ein wenig verändert ...
			if((band >= 1) && (band <= 100))
			{
				var cid = "bla";
			}
			else
			{
				var cid = "bla2";
			}

			// Kurz abfragen ob wir im geteilten Fenster sind oder nicht.
			if(!top.main.documentfrm)
			{
				// Wir befinden uns also nicht im geteilten Fenster. Gut.
				if(top.main.docinfo)
				{
					top.main.document.getElementById("docframe").rows = "35,28,*";
				}
			}
			else
			{
				// Wir befinden uns also im geteilten Fenster. Auch egal.
				if(top.main.documentfrm.docinfo)
				{
					top.main.documentfrm.document.getElementById("docframe").rows = "35,28,*";
				}
			}
			//concat("?f=id$id=" + strDocID + ".pdf$t=document-frameset.htm$tf=docbody$cid=" + cid);
			document.location.href = "?f=id$id=" + strDocID + ".pdf$t=document-body.htm$tf=docbody$cid=" + cid;
		}
		]]>
         </script>
      </HEAD>
         <BODY>
         </BODY>
      </HTML>
   </xsl:template>
</xsl:stylesheet>

Gruß Tom
 

Marine_of_Hell

Grünschnabel
Also wenn ich deinen neuen Namespace inkl. Version einfüge,
seh ich den XML-Baum. :(
Code:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Anderer Namespace und Versions Attribut hinzugefügt ...-->
<xsl:stylesheet version="1.0" 
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

Gruss Marine
 

Thomas Darimont

Erfahrenes Mitglied
Hallo!

Das soll ja auch so sein, wenn du dir die xsd im Browser anschaust... ;-)
Habs mit folgender datei (im selben Verzeichnis) getestet:

Test.xml
Code:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="xmlTest.xsl"?> <!-- Die xsl Datei mit dem Code von oben -->
<bla>
</bla>

Zuvor brachte mir der IE6.0 immer einen Skriptfehler wegen eines Fehlenden ")" Zeichens. Nun läufts durch wenn ich die Test.xml öffne.

Gruß Tom
 

Marine_of_Hell

Grünschnabel
Hi!
Ja genau den Fehler bekomm ich auch. Allerdings habe ich es auf die Größer/Kleiner Zeichen eingegrenzt. Wenn ich zum Beispiel == nehme, dann funktioniert auch alles bei mir.

Ich weiss echt nicht mehr weiter.

Marine
 

Thomas Darimont

Erfahrenes Mitglied
Hallo!

Hast du denn euch die if - Bedingung korrekt geklammert?
if( a <= b ) & c ... ist nicht korrekt!

if( (a<= b) && c) ... das würde passen wenn A < B und die Bedinung C erfüllt ist dann werte den Block aus...

Gruß Tom
 

Marine_of_Hell

Grünschnabel
Hallo!

Ja, die If-Abfrage ist richtig. Das ist ja das seltsame. Ich hab allerdings mal in den Quellcode geschaut, wenn ich "nur" den JS Error bekomme. Da wird standardmässig das "<" in &lt; umgewandelt. Und wenn ich < schreibe wird das in &amp;#60; umgewandelt. Ich tippe auf die Encodierung, die ist allerdings UTF-8 im XSL. Muss ich da eventl. noch woanders die Codierung angeben?

Gruss Marine
 

Marine_of_Hell

Grünschnabel
Hallo!

Also ich hab das jetzt anders gelöst und suche im Location String einfach nach DB1 und DB2 mit indexOf("db1") == -1. Zwar unschön aber es funktioniert.

Trotzdem Danke.

Gruss Marine
 

Neue Beiträge