externe ENTITY und Javascript variable
clabut
- xsl
Hallo,
Ich habe 4 Dateien:
Eine retest.html:
<HTML>
<HEAD>
<TITLE>Untitled</TITLE>
<SCRIPT language="Javascript" type="text/javascript">
var ua = prompt("english,french,german");
var xslDoc = new ActiveXObject("MsXml2.DomDocument.3.0");
xslDoc.async = true;
xslDoc.load("retest.xsl");
var xmlDoc= new ActiveXObject("Msxml2.DOMDocument.3.0");
xmlDoc.async=false;
xmlDoc.load("retest.xsl");
function rebuild(ua){
var selectedNode = xslDoc.selectNodes("//xsl:variable[@name='ua']/@select");
selectedNode.item(0).value="'"+ua+"'";
futuredata.innerHTML=xmlDoc.transformNode(xslDoc);
}
</SCRIPT>
</HEAD>
<BODY onload="rebuild(ua)">
<DIV id="futuredata"></DIV>
</BODY>
</HTML>
eine retest.xml:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="file://M:\Xml\Retest\retest.xsl"?>
<!DOCTYPE Retest
[
<!ELEMENT Test (valeur,testa)>
<!ELEMENT testa (#PCDATA)>
<!ENTITY data SYSTEM "myData.ini">
]>
<Test>
<testa>&data;</testa>
<valeur></valeur>
</Test>
eine retest.xsl:
<?xml version="1.0"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/TR/REC-html40">
<xsl:variable name="ua" select="''" />
<xsl:template match="/">
<xsl:variable name="Vor" select="substring-after(node(),'Vorname =')" />
<xsl:variable name="VorN" select="substring-before($Vor,'Beruf')" />
<html>
<head>
</head>
<body>
<xsl:if test="$ua='french'">Prenom: </xsl:if>
<xsl:if test="$ua='german'">Vorname: </xsl:if>
<xsl:if test="$ua='english'">first name: </xsl:if>
<xsl:value-of select="$VorN"/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
und eine myData.ini
Name = Dupond
Vorname = Paul
Beruf = Internist
Hobby = kayak
Nach der Wahl der Sprache sehe ich entweder Prenom oder Vorname ohne Probleme. Wenn ich der Vorname sehen will ich muß <xsl:template match="/">durch <xsl:template match="retest/testa"> ersetzen, dann kann ich die Sprache nicht mehr wählen. Gibt es eine Methode um die beide template zusammen zu nutzen?
Danke für jede Antwort
clabut
Hallo,
xmlDoc.load("retest.xsl");
^^^^
da solltest du eigentlich deine XML-Datei laden! Klienier Tippfehler wohl.
eine retest.xml:
Die ist ganz falsch:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="file://M:\Xml\Retest\retest.xsl"?>
<!DOCTYPE Retest
Also müsste dein oberstes Element <Retest> lauten, oder dein DOCTYPE "Test".
[
<!ELEMENT Test (valeur,testa)>
<!ELEMENT testa (#PCDATA)>
<!ENTITY data SYSTEM "myData.ini">
]>
<Test>
<testa>&data;</testa>
<valeur></valeur>
</Test>eine retest.xsl:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="ua" select="''" />
<xsl:template match="/">
<html>
<head>
</head>
<body>
<xsl:if test="$ua='french'">Prenom: </xsl:if>
<xsl:if test="$ua='german'">Vorname: </xsl:if>
<xsl:if test="$ua='english'">first name: </xsl:if>
<xsl:apply-templates />
</body>
</html>
</xsl:template>
<xsl:template match="testa">
<xsl:variable name="Vor" select="substring-after(.,'Vorname =')" />
<xsl:variable name="VorN" select="substring-before($Vor,'Beruf')" />
<xsl:value-of select="$VorN"/>
</xsl:template>
</xsl:stylesheet>
Grüße
Thomas