<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<!-- Xml-Validator zum Online-Lernen von Xml und Xsl
	Original: http://www.sql-und-xml.de/
	Jürgen Auer, 08/2003, alle Rechte vorbehalten
-->


<!--
<xsl:output method="html" />
-->

<xsl:template match="/">
<xsl:choose>
	<xsl:when test="not(element-available('xsl:key'))">
		<h3>Leider unterstützt Ihr Xml-Parser nicht den
			Standard des W3-Konsortiums.</h3>
		<h3>Die Anzeige entspricht damit nicht den 
			tatsächlich definierten Texten.</h3>
		<h3>Unter 'Installation' im Inhaltsverzeichnis
			finden Sie für Windows-Rechner nähere Hinweise</h3>
		<h3>Die Ausführung wird abgebrochen, da ansonsten das JavaScript zu
			Fehlermeldungen führt.</h3>
		<xsl:message terminate="yes"/>

	</xsl:when>
<xsl:otherwise>
<html>
<head>
<title>Xml - Xsl - Transformation - Validator</title>
<style>
td { text-align:center} 
a:link 		{color:#003399; text-decoration:none;}
a:visited 	{color:#330033; text-decoration:underline}
a:hover 	{color:#FF3300}

</style>

<script lang="javascript">

function newXMLDoc(whiteSpace) {
	var newDoc = new ActiveXObject("Msxml2.DOMDocument.3.0");
	newDoc.async = false;
	newDoc.validateOnParse = true;
	newDoc.preserveWhiteSpace = whiteSpace;
	return newDoc;
}


function load_and_check(XMLDoc, XMLCode, errBox, errView) {

	errBox.value = "";

	if (!eval(XMLDoc.loadXML(XMLCode))) {
		var erg;
		var i = 1;
		with (XMLDoc.parseError) {
			erg = srcText + "\n";
			while (i <xsl:text disable-output-escaping="yes">&lt;</xsl:text> linepos) 
				{ erg += " "; i += 1;}
			erg += "^ " + reason;

		}
		errBox.value = erg;
		errView.style.backgroundColor = "red"
		return false;
	}
	else { 
		errView.style.backgroundColor = "green"
		return true; }
}

function load_file(place, fileBox) {
	var fso = new ActiveXObject("Scripting.FileSystemObject");	
	var f = fso.GetFile(fileBox.value);
	ts = f.OpenAsTextStream(1, 0);
	erg = ts.ReadAll();
	place.value = erg;
}


function executeTransformation(xmlCode, xslCode, errBox, errViewXml, errViewXsl, whiteSpace) {

/*	Vorherige Aufräumarbeiten, um alle früheren Anzeigen
	zu beseitigen 			*/

	errBox.value = "";
	errViewXml.style.backgroundColor = document.bgColor;
	errViewXsl.style.backgroundColor = document.bgColor;
	document.all.transformAmpel.style.backgroundColor = document.bgColor;

try {

	var xmlDoc = newXMLDoc(whiteSpace);
	var xslDoc = newXMLDoc(whiteSpace);
	xmlStripped = xmlCode.replace(/\s/g, "");
	xslStripped = xslCode.replace(/\s/g, "");
	
	if (xmlStripped.length != 0) {
		if (!load_and_check(xmlDoc, xmlCode, errBox, errViewXml)) 
			{ return; }
	}

	if (xslStripped.length != 0) {
		if (!load_and_check(xslDoc, xslCode, errBox, errViewXsl)) 
			{ return; }
	}

	if ((xmlStripped.length * xslStripped.length) == 0)
		{ return;}

	var erg;
	erg = xmlDoc.transformNode(xslDoc);

	errBox.value = erg;
	document.all.transformAmpel.style.backgroundColor = "green";

}

catch (exception) {
	errBox.value = "";
	var erg = "";

	if (exception.length != 0) {
		for (var a in exception) {
			erg += a + " : " + exception[a] + "\n";	
		}
		errBox.value = erg;
		document.all.transformAmpel.style.backgroundColor = "red";
	}
}

}

function showme(myObj) {
	var erg = "";
	for (var m in myObj) {
		erg += m + " : " + myObj[m] + "\t";
	}
	alert(erg);	
}
</script>
</head>

<body>
<form name="myForm">
<table width="100%" align="center">
<tr>

<xsl:call-template name="eineZeile">
	<xsl:with-param name="local-name" select="'xmlAmpel'"/>
	<xsl:with-param name="local-output" select="'Xml-Input'"/>
	<xsl:with-param name="local-file" select="'XmlFile'"/>
	<xsl:with-param name="local-box" select="'myXml'"/>
</xsl:call-template>

<xsl:call-template name="eineZeile">
	<xsl:with-param name="local-name" select="'xslAmpel'"/>
	<xsl:with-param name="local-output" select="'Xsl-Input'"/>
	<xsl:with-param name="local-file" select="'XslFile'"/>
	<xsl:with-param name="local-box" select="'myXsl'"/>
</xsl:call-template>
</tr>

<tr>
<td><textarea rows="18" cols="45" wrap="off" name="myXml">
&lt;?xml version="1.0"?&gt;
&lt;!DOCTYPE myXml [
    &lt;!ELEMENT myXml (myHead, myBody)&gt;
    &lt;!ELEMENT myHead (myTitle, myDescription?)&gt;
    &lt;!ELEMENT myTitle (#PCDATA)&gt;
    &lt;!ELEMENT myDescription (#PCDATA)&gt;
    &lt;!ELEMENT myBody (#PCDATA | myBold)*&gt;
    &lt;!ELEMENT myBold (#PCDATA)&gt;
]&gt;

&lt;myXml&gt;
&lt;myHead&gt;&lt;myTitle&gt;Kleiner Xml-Validator-Titel&lt;/myTitle&gt;&lt;/myHead&gt;
&lt;myBody&gt;Hier steht der &lt;myBold&gt;Inhalt&lt;/myBold&gt; dieser Datei&lt;/myBody&gt;
&lt;/myXml&gt;
</textarea></td>

<td><textarea rows="18" cols="45" wrap="off" name="myXsl">
&lt;?xml version="1.0"?&gt;
&lt;xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"&gt;

&lt;xsl:template match="myBold"&gt;
    &lt;b&gt;
        &lt;xsl:apply-templates/&gt;
    &lt;/b&gt;
&lt;/xsl:template&gt;

&lt;xsl:template match="myBody"&gt;
    &lt;div&gt;
        &lt;xsl:apply-templates/&gt;
    &lt;/div&gt;
&lt;/xsl:template&gt;



&lt;/xsl:stylesheet&gt;
</textarea></td>
</tr>

<tr>
<td align="center" colspan="2">
<div id="transformAmpel" style="font-size:4pt">&#160;</div>
<textarea rows="6" cols="90" wrap="virtual" name="errBox"></textarea>

</td>

</tr>

<tr>
<td align="center" colspan="2">
<input type="button" 
	onClick="executeTransformation(document.myForm.myXml.value, document.myForm.myXsl.value, document.myForm.errBox, document.all.tags('span')['xmlAmpel'], document.all.tags('span')['xslAmpel'], document.all.whiteSpace.checked)" value="Pruefen + Transformieren"/>
	<br/>
<input type="checkbox" id="whiteSpace"><span style="font-size:x-small">White Spaces?</span></input>
<br/>
<a href="online-xml-trainer-anleitung.html">Kurzanleitung</a>
(<a onClick="javascript:open('online-xml-trainer-anleitung.html', 'kurzanleitung', 'width=450,height=600,left=520,top=0,resizable=yes,scrollbars=yes');" href="#">In neuem Fenster</a>)<br/>
<a href="/">Zurück zur Startseite</a>
</td>
</tr>
</table>
</form>

</body>
</html>

</xsl:otherwise>

</xsl:choose>

</xsl:template>



<xsl:template name="eineZeile">
	<xsl:param name="local-name"/>
	<xsl:param name="local-output"/>
	<xsl:param name="local-file"/>
	<xsl:param name="local-box"/>

	<th width="50%" style="font-size:x-small">
		<span>
		<xsl:attribute name="id"><xsl:value-of select="$local-name"/></xsl:attribute>
			&#160;&#160;
		</span>
		&#160;&#160;
		<xsl:value-of select="$local-output"/>
		&#160;
		<input type="file" size="20">
		<xsl:attribute name="id">
			<xsl:value-of select="$local-file"/>
		</xsl:attribute>
		</input>
		<input type="button" value="Load">
		<xsl:attribute name="onClick">
			load_file(document.all.<xsl:value-of select="$local-box"/>, document.all.<xsl:value-of select="$local-file"/>);
		</xsl:attribute>
		</input>
	</th>

</xsl:template>


</xsl:stylesheet>